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

`npm install` is not installing local package's sub-dependencies

我有一个包 (package-a) 依赖于另一个包 (package-b),它没有发布到 npm 但在我的文件系统上。当我从 package-a 运行 npm install 时, package-b 的依赖项没有安装。我必须使用单个 npm 命令导航到 package-b's directory and run npm install manually. Is there a way to install both packages' 依赖项?

这是我的目录结构:

/
  ...
  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-bs 依赖项没有安装,所以如果我尝试使用 package-a,当 package-brequire 时我会得到一个错误]d 因为它试图使用本地不存在的依赖项。

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


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


更新

事实证明这是 npm 5 中的错误。只有从 package-lock.json 文件安装时才会发生。 (Github Issue)

这些文件(可能)没有被复制,它们被符号链接 (symlink)。这实际上创建了一个看起来像真实目录的 alias/shortcut,但指向另一个路径。

旧的 npm link 功能就是这样工作的。原因是代码保留 "live";链接模块中的更改会在您 运行 引用它们的模块时反映出来,这意味着您不必一直 npm update