如何在monorepo中更快地使webpack?
#javascript #webpack #性能 #monorepo

为什么要使用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


Marc-Olivier JodoinUnsplash

照片