在 Webpack 5 中开启懒编译(Lazy Compilation)

sxkk20082年前知识分享225

在 webpack 5 中推出了 experiments 配置,目的是为了给用户赋能去开启并试用一些实验的特性。

由于实验特性具有相对 宽松的语义版本,可能会有重大的变更,所以你需要将 webpack 的版本固定为小版本号,例如与其使用 webpack: ~5.4.3 不如使用 webpack: ^5.4.3 或者当使用 experiments 配置时将版本锁定。

懒编译(Lazy Compilation)是什么

Lazy Compilation 是只有在用户访问时才编译,包含 2 点,使用入口点和动态导入的代码,它适用 Web 或 Node.js。

webpack 多入口配置

module.exports = {
  //...
  entry: {
    app: './app.js',
    home: './home.js',
    about: './about.js',
  },
}

将代码改成动态导入

// 之前
import { add } from './math'
console.log(add(16, 26))
// 之后
import('./math').then((math) => {
  console.log(math.add(16, 26))
})

React 项目可以使用 React.lazy 动态导入

// 之前
import OtherComponent from './OtherComponent'
// 之后
const OtherComponent = React.lazy(() => import('./OtherComponent'))
module.exports = {
  //...
+  experiments: {
+    lazyCompilation: true,
+  },
};

lazyCompilation 的可配置参数

  • boolean

开启为 true,包含入口和动态加载懒编译

  • object
{
// define a custom backend
backend?: ((
  compiler: Compiler,
  callback: (err?: Error, api?: BackendApi) => void
  ) => void)
  | ((compiler: Compiler) => Promise<BackendApi>)
  | {
    /**
     * A custom client.
    */
    client?: string;
    /**
     * Specify where to listen to from the server.
     */
    listen?: number | ListenOptions | ((server: typeof Server) => void);
    /**
     * Specify the protocol the client should use to connect to the server.
     */
    protocol?: "http" | "https";
    /**
     * Specify how to create the server handling the EventSource requests.
     */
    server?: ServerOptionsImport | ServerOptionsHttps | (() => typeof Server);
},
entries?: boolean,
imports?: boolean,
test?: string | RegExp | ((module: Module) => boolean)
}
  • backend:配置修改自定义后端,默认是 webpack dev-server
  • entries: 是否开启入口访问懒加载
  • imports 5.20.0+:是否开启动态导入的代码懒编译
  • test 5.20.0+: 指定哪些动态导入的模块需要懒编译

比如可以改成这样,将多入口改成懒编译,忽略动态导入的代码

module.exports = {
  // …
  experiments: {
    lazyCompilation: {
      imports: false,
      entries: true,
    },
  },
}

效果

我的项目有 10w+ 代码量,可以在 2s 内启动 启动效果

然后当再次输入 url 时,会再次编译,速度比 vite 了,不同的是 vite 是将 node_modules 预构建的。

输入url时再次编译

若在开启 webpack5 的文件缓存,将会非常快,当出入 url 时候就编译好看,几乎不需要等候编译

module.exports = {
  // …
  {
      type: 'filesystem',
      cacheDirectory: path.resolve('node_modules/.cache'),
      store: 'pack',
      ...
    }
};

小结

懒编译目前应该还在 beta,可能会有 BUG;next.js 其实就加过基于路由的懒编译,优点是能提速,缺点是跳转页面时需要等待,我认为懒编译在多页面项目必不可少,因为开发时候只是针对单个页面开发就够了。

以上就是本文全部内容,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

本文首发掘金平台,来源Ai知识分享博客

相关文章

人工智能机器人发展史 - 探索人类未来的智慧助手与伙伴

人工智能机器人发展史 - 探索人类未来的智慧助手与伙伴

  随着科技的不断进步与创新,人工智能机器人已经成为现实中的一部分。从早期的机械人到如今的智能助手,人工智能机器人在过去几十年间取得了长足的进步。本文将以人工智能机器人发展史...

图片提取文字在线:人工智能解放文本信息

图片提取文字在线:人工智能解放文本信息

  随着人工智能和图像识别技术的快速发展,图片提取文字在线成为一项备受关注的技术。它将图片中的文字内容提取出来,为世界上大量的非结构化文本提供了更多的应用场景和可能性。  让...

AI自动绘画大师:让艺术创作更加高效智能化

AI自动绘画大师:让艺术创作更加高效智能化

  随着人工智能技术的不断发展,AI自动绘画的应用也日益广泛。利用计算机视觉、自然语言处理等人工智能技术,AI自动绘画大师能够模拟人类艺术家的创作过程,自动绘制出优美、精美的...

简单介绍一下自己

我是一名 90 后,12 年毕业,工作 9 年,发过传单,做过运营,也把自己当成产品经理。目前是一名小厂前端工程师,日常负责公司 2B 产品开发迭代交付,还有一些公司内部组件、脚手架维护等。这一年很少加班,调休全靠年假了 😊 。

我的 2021

完成的

除了完成开发工作之外,还完成了:

掘金后台统计

  1. 在掘金发布 12 篇文章

  2. 【全栈】第三次重构我的个人博客

  3. 【全栈】模仿在线流程图  processon.com,目前已经下线,掘金实现文章

  4. 【全栈】实现一个简易版 react 低代码平台 https://low-code.runjs.cool/, 目前只实现了视图层,后面的逻辑有些复杂,没有继续下去。

  5. https://dev.to/ 发布 1 篇

9 年小厂老前端的年终总结

前言时光飞逝,岁月如梭,转眼来到 2021 年底,这一年少了些理性,多了点感性,少了些自由,多了一份责任,这一年视乎没做什么事情,但又过得非常充实,最欣慰的是回家有个人等待着我的拥抱,最快乐的是耳边多...

AI换脸技术的发展与应用——改变面孔的科技革新

AI换脸技术的发展与应用——改变面孔的科技革新

    随着人工智能技术的快速发展,AI换脸技术成为了一个备受关注的热门话题。这项技术结合了深度学习、计算机视觉和图像处理等领域的研究成果,可以实现将一个人的面孔无缝地替换成...

文字识别插件人工智能技术:提升效率、深挖数据潜能

文字识别插件人工智能技术:提升效率、深挖数据潜能

  文字识别(OCR)插件是一种基于机器学习和人工智能的技术,可将文档、图片中的文字提取出来,实现自动识别和转换。在如今信息爆炸的时代,文字识别插件的应用范围日益广泛,包括但...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。