Und*_*ion 15 javascript npm lerna monorepo yarnpkg
当 monorepo 中的包具有对等依赖项时,如何在开发过程中使这些依赖项对它们可用?
例如,一个包在/packages/namespace/alpha/可能有一个devDependency的styled-components在它的package.json。
可能的选项:
声明与开发依赖项相同的依赖项(不必要的重复和维护成本)。
在 monorepo 的路由中安装包package.json(使用yarn link.
我正在将 Lerna 与纱线工作区一起使用。
Shl*_*ang 11
Yarn 工作区应该node_modules根据节点的模块解析算法将几乎所有内容安装在根目录中。这就是您在选项 2 中描述的内容。
所以,基本上它应该在大多数情况下工作。当某些工具依赖于自己的解析逻辑或某些依赖项存在不同版本等时,可能会出现问题。
选项 1 是一种非常常见的方法,但正如您所说,它会增加维护成本。您可能需要跟踪此类依赖项并将它们标记为外部,以避免将它们包含到 lib 的构建版本中。
有可能的解决方法。例如,Angular 建议使用 TSpaths选项。你可以在没有打字稿的情况下做同样的事情,例如,使用 jsconfig.json创建 React App 。或者你可以使用类似于这个rollup 插件的东西,它可以自动添加基于 的外部peerDependencies变量,这样你也可以安全地将它们列为 devDependies。
在这个 lerna 问题中,这两个选项都被认为是合法的
另一种选择是安装您的对等依赖项,就目前而言,没有“官方”解决方案。有与和一起使用的安装 peers cli包。有一个热功能要求的。有计划将此功能添加到npm v7,实际上 npm 在 v3 之前就已经做到了。npmyarnyarn
总结一下,没有一刀切的解决方案,您需要了解自己想要得到什么以及可以为此牺牲什么。
更新(2020 年 12 月 14 日)——NPM 7 安装了 peer deps
正如我在初始答案中提到的,npm v7 默认实现了安装对等依赖项。有关详细信息,请参阅RFC。
| 归档时间: |
|
| 查看次数: |
4324 次 |
| 最近记录: |