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

sta*_*lei 4 package-managers package node.js npm npm-install

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

Mic*_*ngo 6

npm install examplePackage将安装包在node_modules当前目录中.当您在Node.js中导入模块时require('examplePackage'),首先检查它是否是核心模块(例如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

命令行工具或通常包含可执行文件的程序包(例如webpack)可node_modules/.bin用于执行它们,它们必须位于shell中PATH或直接调用.因为项目调用本地安装的可执行文件是很常见的,所以你可以scriptspackage.json没有前缀的部分中使用它们node_modules/.bin.例如,要运行webpack,您可以定义一个脚本:

"scripts": {
  "build": "webpack"
}
Run Code Online (Sandbox Code Playgroud)

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