我有以下monorepo结构 root--AppOne----package.json----node_modules------styled-components--AppTwo----package.json----node_modules------styled-components--Shared----componentA----package.json----node_modules------styled-components 我的问
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成熟.