【问题标题】:`npm install` is not installing local package's sub-dependencies`npm install` 没有安装本地包的子依赖
【发布时间】:2017-08-13 21:15:20
【问题描述】:

我有一个包 (package-a),它依赖于另一个包 (package-b),它没有发布到 npm 但在我的文件系统上。当我从package-a 运行npm install 时,未安装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-bs 依赖项没有安装,所以如果我尝试使用 package-a,当package-brequired 时我会收到错误,因为它正在尝试使用本地不存在。

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


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


更新

事实证明这是 npm 5 中的一个错误。它仅在从 package-lock.json 文件安装时发生。 (Github Issue)

【问题讨论】:

标签: javascript node.js npm npm-install


【解决方案1】:

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

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

【讨论】:

  • 这回答了我的第二个问题(谢谢),但不是我的第一个问题
  • 原来有问题的行为是由于 npm 中的错误。我现在会接受这个答案,因为它回答了我的第二个问题。
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多