我是Node.js echo系统的新手,正在尝试为JavaScript应用程序开发建立构建系统。我有一些无法找到答案的问题。
在this blog post中,很明显,您应该在本地安装所有项目特定的节点模块。
现在,我将整个grunt
模块本地安装在我的项目目录中。我得到以下目录结构...
my_project/
lib/
utils/
underscore.js
... other project files ...
node_modules/
.bin/
grunt -> ../grunt/bin/grunt*
grunt/
node_modules/
bin/
dev/
docs/
lib/
test/
tasks/
grunt.js
package.json
... others ...
请注意,有两个
node_modules
目录。一个在我的项目中,另一个在grunt
模块中。问:为什么在不同级别有多个
node_modules
目录?有人可以解释一下目录结构如何工作吗?问:如果我安装另一个模块,它还会有自己的
node_modules
目录吗?问:如果我进入
my_project/lib/utils
,然后运行命令npm install <some_module>
,那么是否仅为该目录或整个项目安装该模块?如果是后者,那么NPM / Node如何找出项目根目录?请在这里说明我可能会丢失的其他内容。
最佳答案
npm注册表中的每个项目都可以认为是一个独立的模块(特别是CommonJS模块),该模块具有在该项目的根目录下的package.json
文件中定义的源代码和项目元数据。
当您在具有npm install
文件的目录中键入npm i
(或仅package.json
)时,npm会读取项目根目录中dependencies
中定义的package.json
集合,并将这些软件包安装在node_modules
中目录。
那么嵌套的node_modules
目录是什么? npm install
是递归的。如果项目A需要B,而项目B需要C,则您会看到以下目录结构:
A/
A/node_modules
A/node_modules/B
A/node_modules/B/node_modules
A/node_modules/B/node_modules/C
在您的情况下,将
grunt
添加到dependencies
文件中的my_project/package.json
时,该依赖项将添加到其自己的目录:my_project/node_modules/grunt
中。但是grunt
有很多依赖关系,而那些依赖关系也有依赖关系。因此,您将看到许多嵌套的node_modules
目录。关于第三个问题,请参见本页的
algorithm
部分:https://npmjs.org/doc/install.html-描述npm install
如何搜索依赖项。npm here中还提供了有关全局和局部依赖关系的更多信息。