全球webpack安装与项目特定的webpack安装

我对webpack的工作方式有些困惑。 如果你在你的根目录下运行npm install examplePackage ,那么是否把这个软件包安装到你的硬盘? 那么这是否意味着您可以随时在任何文件中导入该软件包? 这与在你的项目中运行npm install examplePackage什么不同呢? 是因为当你把你的项目推到Github时,会有一个package.json供其他人使用,并确保他们有必要的库来运行你的应用程序呢? 节点知道如何通过你的项目search包或硬盘? 它只是检查你的图书馆,然后如果它没有find它,它会看你的硬盘?

npm install examplePackage会将程序包安装在当前目录的node_modules中。 当你用require('examplePackage')在Node.js中导入一个模块时,它首先检查它是否是核心模块(例如fs )。 如果它不是核心模块,则开始查找当前目录的node_modules 。 如果在该目录中找不到该模块,则会移至父目录并检查其node_modules目录。 等到find该模块或到达文件系统的根目录为止。 请参阅https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders

这确实意味着您可以从文件系统的任何位置导入已安装在/的软件包。 虽然可能只是将所有依赖项安装在/ ,但是具有项目特定的依赖关系还是有很多优点的。 也许最大的好处是你可以很容易地与他人共享你的项目,你可以肯定它会为他们工作(假设一个兼容的Node.js版本)。

节点知道如何通过你的项目search包或硬盘?

它仅在您的硬盘上查找,特别是在上面提到的node_modules目录中。 正如您已经注意到的,您可以在package.json指定依赖关系,但是节点本身不会对这些信息做任何事情。 相反,您需要运行npm install ,这将在package.json安装所有列出的依赖项。 之后,您可以正确导入这些模块。

注意: npm install examplePackage不会将examplePackage添加到你的package.json ,它只是安装它。 如果要将其作为依赖项添加,请使用npm install --save examplePackage或作为devDependency与npm install --save-dev examplePackagehttps://docs.npmjs.com/cli/install

CLI

命令行工具或通常包含可执行文件(如webpack)的包在node_modules/.bin中可用,为了执行它们,它们必须位于shell的PATH或者直接调用。 由于项目调用本地安装的可执行文件非常常见,因此可以在package.jsonscripts部分中使用它们,而无需在node_modules/.bin添加前缀。 例如运行webpack你可以定义一个脚本:

 "scripts": { "build": "webpack" } 

然后运行npm run build而不必运行./node_modules/.bin/webpack 。 有关脚本的更多信息: https : //docs.npmjs.com/misc/scripts