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

sxkk20082年前知识分享119

在 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技术的应用潜力广泛,不仅可以改善图像识别的准确性和效率,还能帮助各行各业创造更多新的商业机会。 ...

https://retor.hr/

https://sedeblockchain.com/

https://dnaprojecten.nl/

web design trend 2023 example 1 https://nationalstudentshow.com/

https://anakaric.com/

https://yaremenko.design/

https://www.landa.as/es/

web design trend 2023 example https://selectedbase.com/

CSS First

在过去,我们通常依靠 JavaScript 来创造网站的视觉效果。但从那时起,CSS 已经发展到可以做很多复杂的事情,而这些事情是 JavaScript 无法做到的。三维变换、过滤器和新的 CSS 功能,如:选择器(has)、容器查询(@container)和层叠层(@layer),将使许多有趣的网页设计纯粹依靠 CSS 来实现。

因此,从今年开始,我们将看到网站减少对 JavaScript 的依赖来创造视觉效果。

https://redstapler.co/cool-css-text-light-effect-5-minutes-tutorial/

https://redstapler.co/3d-infinity-effect-css-tutorial/

https://codepen.io/seyedi/pen/zYoeLEv

3d transparent video https://redstapler.co/create-3d-effect-on-website-using-transparent-video-background/

2023 web 设计趋势

翻译一篇文章原文链接:https://redstapler.co/web-design-trends-2023/作者:TK在过去的一年里,我们在网页设计领域看到了很多令人兴奋的发展。而在这篇文章中,我...

AI绘画模式的革新:以 GAN 技术为例

AI绘画模式的革新:以 GAN 技术为例

  随着人工智能技术的快速发展,AI 绘画模式也已经成为了一项受到广泛关注的技术。AI 绘画模式可以让计算机通过学习已经存在的作品中的规律,从而学习并创作出新的绘画作品。...

人工智能技术缺陷:挑战与改进措施

人工智能技术缺陷:挑战与改进措施

  人工智能作为一种前沿技术,近年来取得了显著的发展和应用。然而,人工智能技术在应用过程中也存在着一些明显的缺陷。  首先,人工智能技术的一个主要缺陷是其对数据的依赖性。人工...

人工智能正在给我们的生活带来巨变

人工智能正在给我们的生活带来巨变

   人工智能是如何改变我们的生活的?现在我们不仅可以享受到许多方便实用的智能产品,而且还可以看到人工智能已经成为许多领域的游戏规则。  智能生活产品的种类繁多,涉及到诸如智...

我用 nodejs 爬了一万多张小姐姐壁纸

前言哈喽,大家好,我是Ai知识分享,为什么要下载这么多图片呢? 前几天使用 uniapp + uniCloud 免费部署了一个壁纸小程序,那么接下来就需要一些资源,给小程序填充内容。爬取图片首先初始化...

发表评论    

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