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