使用NPM&gruntjs构build系统

我是新的Node.js回声系统,并尝试build立一个JavaScript应用程序开发的构build系统。 我有一些问题,我无法find答案。

在这篇博文中 ,很显然您应该在本地安装所有项目特定的节点模块。

现在,我在本地项目目录中安装整个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如何找出项目的根?

请解释我可能在这里失踪的其他事情。

npmregistry中的每个项目都可以被认为是一个独立的模块(特别是一个CommonJS模块),它具有在该项目的根目录下的package.json文件中定义的源代码和项目元数据。

当你在一个包含package.json文件的目录中inputnpm install (或者只是npm i )时,npm会读取项目根目录下package.json中定义的dependencies集合,并将这些包安装在node_modules目录中。

那么嵌套的node_modules目录是什么? npm install是recursion的。 如果项目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 

在你的情况下,当你在my_project/package.json文件中添加gruntdependencies时,这个依赖将被添加到它自己的目录中: my_project/node_modules/grunt 。 但是grunt有很多的依赖关系,而这些依赖关系具有依赖关系。 所以你会看到很多嵌套的node_modules目录。

对于第三个问题,请参阅此页上的algorithm部分: https : //npmjs.org/doc/install.html – 它描述了npm install如何search依赖关系。

这里还有一些关于全局和局部依赖关系的更多信息。