1

我是 Node.js 回显系统的新手,正在尝试为 JavaScript 应用程序开发设置构建系统。我有一些问题我找不到答案。

这篇博文中可以清楚地看出,您应该在本地安装所有项目特定的节点模块。

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模块中。

Q : 为什么有多个node_modules不同级别的目录?有人可以解释一下目录结构是如何工作的吗?

:如果我安装另一个模块,它也会有自己的node_modules目录吗?

:如果我进入my_project/lib/utils然后运行命令npm install <some_module>,该模块将只安装该目录还是整个项目?如果是后者,那么 NPM/Node 是如何找出项目根目录的呢?

请解释我在这里可能遗漏的任何其他内容。

4

1 回答 1

4

npm 注册表中的每个项目都可以被认为是一个自包含的模块(特别是 CommonJS 模块),该模块package.json在该项目的根目录中的文件中定义了源代码和项目元数据。

当您在包含文件的目录中键入npm install(或仅npm i)时package.json,npm 会读取项目根目录中dependencies定义的集合并将这些包安装在目录中。package.jsonnode_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

在您的情况下,当您在文件中添加gruntto时,该依赖项将被添加到其自己的目录中:. 但是有很多依赖关系,而那些依赖关系有依赖关系。所以你会看到很多嵌套的目录。dependenciesmy_project/package.jsonmy_project/node_modules/gruntgruntnode_modules

对于您的第三个问题,请参阅algorithm此页面上的部分:https ://npmjs.org/doc/install.html - 它描述了如何npm install搜索依赖项。

这里还有一些关于 npm 中全局与本地依赖关系的更多信息。

于 2012-09-25T21:45:04.203 回答