微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有以下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成熟.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐