`npm install`没有安装本地包的子依赖项

时间:2017-08-13 21:15:20

标签: javascript node.js npm npm-install

我有一个包(package-a)依赖于另一个包(package-b),它不会发布到npm但是在我的文件系统上。当我从npm install运行package-a时,未安装package-b的依赖项。我必须导航到package-b的目录并手动运行npm install。有没有办法用单个npm命令安装两个包的依赖项?

这是我的目录结构:

/
  ...
  shared/
    ...
    javascript/
      ...
      package-b/
        package.json
  package-a/
    package.json

根据the docs,我将以下内容放在package-a/package.json中。 (我正在使用npm 5 +)

dependencies: {
  package-b: "file:../shared/javascript/package-b",
}

当我导航到/package-a并运行npm install时,它会像正常一样安装所有package-a的依赖项,并将package-b目录复制到package-a/node_modules 。这可能是我输入require('package-b')而不是require('../shared/javascript/package-b')的原因。

但是,正如我之前所说,package-b的依赖项未安装,因此如果我尝试使用package-a,则package-brequire时出错因为它试图使用本地不存在的依赖项。

再次,为了解决这个问题,我可以导航到package-b并运行npm-install,但我希望有一个更好的解决方案,因为我可能有很多这样的子包,我想如果我可以使用npm命令执行此操作,请避免编写shell脚本来安装所有依赖项。 (也许我只是做错了,npm install应该工作?)

跟进问题:当我从npm install目录运行package-b时,会在那里安装软件包,但不会安装到已复制到package-b的{​​{1}}版本中在第一个/package-a/node_modules期间,一切仍然有效。所以现在好像我npm install实际上解析为require('package-b')而不是/shared/javascript/package-b。那么首先复制文件有什么意义呢?

更新

事实证明这是npm 5中的一个错误。只有在从/package-a/node_modules/package-b文件安装时才会发生。 (Github Issue

1 个答案:

答案 0 :(得分:1)

文件(可能)没有被复制,它们被符号链接(符号链接)。这实际上创建了一个看起来像真实目录的别名/快捷方式,但指向另一条路径。

这是较旧的npm link功能的工作原理。原因是代码保持"直播&#34 ;;每当您运行引用它们的模块时,都会反映链接模块中的更改,这意味着您不必一直npm update