当前位置 : 主页 > 手机开发 > 其它 >

npm – 如何在monorepo中的多个应用程序之间共享组件时处理共享依赖项

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有以下monorepo结构 root--AppOne----package.json----node_modules------styled-components--AppTwo----package.json----node_modules------styled-components--Shared----componentA----package.json----node_modules------styled-components 我的问
我有以下monorepo结构

root
--AppOne
----package.json
----node_modules
------styled-components

--AppTwo
----package.json
----node_modules
------styled-components

--Shared
----componentA
----package.json
----node_modules
------styled-components

我的问题是AppOne和AppTwo都使用共享目录中的componentA,它依赖于NPM包,例如在样式组件上

这意味着我需要在所有三个目录中安装样式组件,这会增加软件包大小,如果版本不同,可能会导致软件包执行应该执行的操作.

这也意味着我从样式组件中得到以下错误:

看起来在此应用程序中初始化了几个“样式组件”实例.
这可能会导致动态样式无法正确呈现,在重新水化过程中发生错误,并使您的应用程序更大,没有充分的理由.

我的问题是 – 解决这种情况的最佳方法是什么?理想情况下,我只希望将这个软件包安装在一个地方.我应该在Shared中安装它并在AppOne和AppTwo中使用别名来使用该包吗?

任何建议非常感谢!

我自己在一个大的monorepo上工作,我会说有很多方法可以通过编写自定义脚本来解决这个问题,然后在“安装后”的npm上触发它们.也许你也可以手动维护每个package.json的peerDependencies中的依赖关系.

我更喜欢依靠工具来处理依赖关系管理.
在我的项目中,我使用了Lerna,它具有package hoisting feature这个用例.
如果Lerna对你来说太过分了,你应该知道包裹吊装也是由Yarn Workspaces提供的.事实上,当Lerna在纱线上使用时,Lerna只需将包裹吊装到纱线工作区,所以你真的不需要Lerna那.

在这方面我也听说过Bolt,但是从2019年初开始,它非常有前途但不如Yarn / Lerna成熟.

网友评论