作为自身嵌套依赖项的NPM包

5
我有一个NPM包(包A),它会使用自身的最新稳定版本进行编译。它通过中间的Grunt任务(包B)来实现,该任务本身依赖于包A。因此,依赖关系链如下:
包A -> 包B(作为devDependency)-> 包A(作为dependency)
然而,当通过npm install安装包A时,NPM不会将包A安装为包B的依赖项,可能是出于设计考虑 - 我认为它试图防止循环依赖,尽管因为包B只是一个devDependency,它不会被安装在子包A上。
那么,安装子包A的最少hacky /推荐方式是什么?我的第一个解决方案是添加一个postinstall脚本,只需运行cd node_modules/package-B && npm install package-A,但这会破坏postinstall的CWD并非始终为包的根目录的问题。

你有找到任何新的解决方法吗?因为我们刚刚遇到了同样的问题——我们的测试库使用了我们试图用我们的测试库进行测试的库。按照建议手动安装可以完美地工作,但这真的很烦人。 - balupton
2个回答

4
做这样的任务,运行一个js文件怎么样?
var spawn = require("child_process").spawn;
spawn("npm", [ "install", "package-A" ], {
  cwd: process.cwd() + "/node_modules/package-B/",
  env: process.env
});

我不确定这是否可行,但也许它可以激发你做更多事情 ;)


1
是的,这就是正确的方法。谢谢! :) - Thomas

3
我找到了一个很好的自动化方法来完成这个任务:
  1. Add this file to your project: cyclic.js
  2. Add the following to your package.json files:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接