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

Global webpack install vs. project specific webpack install

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

npm install examplePackage 将在当前目录的 node_modules 中安装软件包。当您使用 require('examplePackage') 在 Node.js 中导入模块时,它首先检查它是否是核心模块(例如 fs). If it isn't a core module it starts looking in node_modules of the current directory. If the module is not found in that directory, it moves to the parent directory and checks its node_modules directory. And so on until the module was found or the root of the file system is reached. See https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders

这确实意味着您可以从文件系统的任何位置导入已安装在 / 中的软件包。尽管可以只安装 / 中的所有依赖项,但拥有项目特定的依赖项有很多优点。可能最大的优势是您可以轻松地与他人分享您的项目,并且您可以确定它会为他们工作(假设兼容 Node.js 版本)。

How does node know to search thru either your project for a package or your hard drive?

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

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

CLI

node_modules/.bin 中提供了命令行工具或通常带有可执行文件的软件包,例如 webpack,为了执行它们,它们必须在您的 shell 中 [=28] =] 或直接调用。因为项目调用本地安装的可执行文件是很常见的,所以您可以在 package.jsonscripts 部分使用它们,而无需在它们前面加上 node_modules/.bin。例如 运行 webpack 你可以定义一个脚本:

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

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