【问题标题】:Using NPM & gruntjs build system使用 NPM 和 grunt js 构建系统
【发布时间】:2012-09-26 05:45:04
【问题描述】:

我是 Node.js 回显系统的新手,正在尝试为 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 是如何找出项目根目录的呢?

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

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 2014-08-17
      • 1970-01-01
      • 2014-02-09
      相关资源
      最近更新 更多