全局webpack安装与项目特定webpack安装

时间:2017-02-14 07:26:41

标签: node.js npm package npm-install package-managers

我对webpack的工作方式有些困惑。如果您在根导向器中运行npm install examplePackage,是否会将软件包安装到您的硬盘驱动器上?那么这是否意味着您可以随时在任何文件中导入该包?这与在项目中运行npm install examplePackage有何不同?是因为当你将你的项目推送到Github时,会有一个package.json供其他人关注并确保他们有必要的库来运行你的应用程序吗?节点如何知道通过您的项目搜索包或硬盘驱动器?它是先查看你的图书馆,如果它找不到它,它会查看你的硬盘吗?

1 个答案:

答案 0 :(得分:5)

npm install examplePackage会将软件包安装在当前目录的node_modules中。当您使用require('examplePackage')在Node.js中导入模块时,它首先检查它是否是核心模块(例如fs)。如果它不是核心模块,它将开始查看当前目录的node_modules。如果在该目录中找不到该模块,它将移动到父目录并检查其node_modules目录。依此类推,直到找到模块或到达文件系统的根目录。见https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders

这确实意味着您可以从文件系统的任何位置导入已安装在/中的软件包。虽然可以在/中安装所有依赖项,但具有项目特定依赖项有许多优点。可能最大的优势是您可以轻松地与他人共享您的项目,并且您可以确保它对他们有用(假设兼容的Node.js版本)。

  

节点如何知道通过项目搜索包或硬盘驱动器?

它只能查看您的硬盘驱动器,特别是上面提到的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

node_modules/.bin中提供了命令行工具或通常带有可执行文件的包,例如webpack,为了执行它们,它们必须位于shell的PATH中或直接调用。由于项目调用本地安装的可执行文件非常常见,因此您可以在scripts的{​​{1}}部分中使用它们,而不必使用package.json作为前缀。例如,要运行webpack,您可以定义一个脚本:

node_modules/.bin

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