5

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

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

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

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

4

2 回答 2

4

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

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

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

于 2013-07-04T19:48:06.750 回答
3

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

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

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

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

于 2013-09-18T04:32:45.683 回答