我是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中还提供了有关全局和局部依赖关系的更多信息。

10-06 05:20
查看更多