我有一个包(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-b
为require
时出错因为它试图使用本地不存在的依赖项。
再次,为了解决这个问题,我可以导航到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)
答案 0 :(得分:1)
文件(可能)没有被复制,它们被符号链接(符号链接)。这实际上创建了一个看起来像真实目录的别名/快捷方式,但指向另一条路径。
这是较旧的npm link
功能的工作原理。原因是代码保持"直播&#34 ;;每当您运行引用它们的模块时,都会反映链接模块中的更改,这意味着您不必一直npm update
。