全球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 examplePackage
。 https://docs.npmjs.com/cli/install
CLI
命令行工具或通常包含可执行文件(如webpack)的包在node_modules/.bin
中可用,为了执行它们,它们必须位于shell的PATH
或者直接调用。 由于项目调用本地安装的可执行文件非常常见,因此可以在package.json
的scripts
部分中使用它们,而无需在node_modules/.bin
添加前缀。 例如运行webpack你可以定义一个脚本:
"scripts": { "build": "webpack" }
然后运行npm run build
而不必运行./node_modules/.bin/webpack
。 有关脚本的更多信息: https : //docs.npmjs.com/misc/scripts