首页 > 解决方案 > 安装我的依赖项的开发依赖项

问题描述

我有一个 monorepo,其中有一个/packages包含许多包的文件夹。

我可以使用npm i ./packages或者npm i是否已经使用文件指针指定了它们。

看起来像这样:

  "dependencies": {
    "@reggi/command": "file:packages/command",
    "@reggi/dep-merge": "file:packages/dep-merge",
    "@reggi/dep-merge-cli": "file:packages/dep-merge-cli",
    "@reggi/dep-pointer": "file:packages/dep-pointer"
  }

问题是,如果我安装这些软件包,我不会获得开发依赖项。

我真正想要的是也安装devDependencies这些依赖项。

lerna一个率先使用 monorepos 的流行工具建议您将devDependencies这些包的所有内容添加到根包中。这样做的问题是它消除了两个包依赖给定开发依赖项的不同版本的能力。

我所做的是创建一个脚本,将所有内容合并devDependenciesdependenciesatpreinstall然后撤消更改。这可行,但有时可能有点不稳定,尤其是在向shrinkwrap.

如果我能npm i --allDevDepsFromDeps安装我的所有依赖项开发依赖项,那就太好了。

我还缺少其他解决方案吗?

标签: node.jsnpmlerna

解决方案


我看不出你想在那里实现什么,不是用于开发的 devDepencies 吗?

如果您想为不同的包提供不同的版本,请不要将它们放在根目录中,而是放在每个包中。

问题是,如果我安装这些软件包,我不会获得开发依赖项。

您应该将这些包视为“生产”/“捆绑”包,在这种情况下您不需要开发依赖项。

例如,当您在 @pkg/A 上工作时,它将有自己的 devDep,但如果您在依赖于 @pkg/A 的 @pkg/B 上工作,@pkg/A 应该是生产/捆绑版本(没有 devDeps)。

也许你应该看看bundledDependenciesor peerDependencies,这可能对你有帮助。


推荐阅读