为什么要使用monorepo?
MonorePo是共享代码并修改现有代码的最佳方法。
您可以在软件包中构建代码,保留每个域的公共API的明确定义的界限。
您可以轻松地修改后端,前端,设计系统,单个拉请求中的共享代码。它也很容易审查并在本地测试所有这些更改。无需发布软件包。
MonorePo的一个缺点是您将所有代码都放在同一位置,这可能会减慢很多事情,例如捆绑机,测试跑者,GIT,IDE等。但是,开发人员最激动人心的工作之一就是优化某些东西。
什么是webpack?
WebPack是Frontend最著名的捆绑包(我们还将后端捆绑在一起)。如果您足够有创意,您几乎可以使用WebPack做任何事情。
随着我们不断为MonorePo添加越来越多的软件包,WebPack的构建和重建开始变得越来越慢。
让我们看看我们如何在Woovi上解决这个问题。
如何在monorepo中更快地使webpack?
当前,我们的MonorePo中有7个前端,还有更多的包装,例如我们的设计系统,WebPack工具,表单软件包,桌子等。
我们注意到,即使我们没有更改其任何相关代码,每个前端都在重建。我们重读WebPack文档并在WebPack配置文件中改进了我们的WatchOption。
这是我们的解决方案
{
watchOptions: getWebpackWatchOptions(getIgnoredEntrypoints('main')),
}
const getIgnoredEntrypoints = (except = '') => {
const apps = [
'**/packages/babel',
'**/packages/console',
'**/packages/eslint',
'**/packages/eslint-plugin',
'**/packages/login',
'**/packages/main',
'**/packages/null',
'**/packages/register',
]
return apps.filter((app) => !app.includes(except));
}
const getWebpackWatchOptions = (ignored = []) => ({
aggregateTimeout: 200,
ignored: [
'**/node_modules',
'**/build',
'**/.jest-cache',
'**/dist',
'**/.webpack',
'**/.cache',
'**/cache',
'**/public',
'**/docs-build',
'**/.idea',
'**/prettier',
'**/dist-storybook',
'**/.docusuarus',
'**/.next',
'**/coverage',
'**/.eslintcache',
'**/build-server',
'**/.docusuarus',
'**/yarn-error.log',
'**/.docusuarus',
'**/turbo-build.log',
'**/.turbo',
'**/__tests__',
'CHANGELOG.md',
'*.log',
'*.swp',
'*.tmp',
...ignored,
],
});
此配置将使每个前端忽略所有其他6个前端的更改,也可以在某些生成的代码(缓存和node_modules中)进行更改。
webpack构建和重建速度再次更快,并且还避免了不必要的重建。
综上所述
monorepos带来了很多好处,但它也带来了很多挑战,例如性能优化。 WebPack非常通用,可以是使您的启动量表的绝佳工具。
woi
Woovi是一家创业公司,使购物者能够按照自己的意愿付款。为了实现这一目标,Woovi为商人提供即时付款解决方案接受订单。
如果您想与我们合作,我们是hiring!
照片