【问题标题】:NPM package as nested dependency of selfNPM 包作为 self 的嵌套依赖
【发布时间】:2013-07-02 20:39:06
【问题描述】:

我有一个 NPM 包(包 A),它使用自身的最后一个稳定版本进行编译。它通过一个本身依赖于包 A 的中间 Grunt 任务(包 B)来做到这一点。因此,依赖链是:

包 A -> 包 B(如 devDependency) -> 包 A(如 dependency

但是,当通过npm install 安装包 A 时,NPM 不会将包 A 安装为包 B 的依赖项,这可能是设计使然 - 我假设它试图防止循环依赖,即使因为包 B 只是一个devDependency,反正不会安装在子包A上。

安装子包 A 的最简单/推荐的方式是什么?我的第一个解决方案是添加一个简单地运行 cd node_modules/package-B && npm install package-Apostinstall 脚本,但这会中断,因为 postinstall 的 CWD 并不总是包的根目录。

【问题讨论】:

  • 你有没有找到解决这个问题的新方法?因为我们刚刚遇到了同样的问题——我们的测试库利用了我们试图用我们的测试库测试的库。按照建议的手动安装工作得很好,但真的很蹩脚。

标签: node.js module dependencies npm


【解决方案1】:

想出了一个很好的自动化方法:

  1. 将此文件添加到您的项目中:cyclic.js
  2. 将以下内容添加到您的 package.json 文件中:

    "scripts": {
        "preinstall": "node ./cyclic.js"
    }
    

使用此解决方案,当您运行npm install 时,它会自动为您强制安装循环依赖项而不会出错。

【讨论】:

    【解决方案2】:

    为这样的任务创建一个 js 文件怎么样?

    var spawn = require("child_process").spawn;
    spawn("npm", [ "install", "package-A" ], {
      cwd: process.cwd() + "/node_modules/package-B/",
      env: process.env
    });
    

    我不确定这是否可行,但也许它会激励你用它做更多的事情;)

    【讨论】:

    • 是的,这就是要走的路。谢谢! :)
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 2017-09-24
    • 2021-09-11
    • 1970-01-01
    • 2016-12-15
    • 2015-07-07
    • 2013-03-26
    相关资源
    最近更新 更多