webpack的chunkFilename详细说明

简介: webpack的chunkFilename详细说明

你知道chunkFilename的作用吗?了解之前,先了解懒加载,动态导入的功能。

通常,一个网页会有自身的侧重点:

1、假如你在 YouTube 上加载一个视频页面,你更关心的肯定是视频而不是评论。所以,这里视频就比评论重要。

2、又比如你在一个新闻网站看一篇文章,你更关心的肯定是文章的文字而不是广告。所以,这里文字就比广告重要。

上面的这些情况,都可以通过优先下载最重要的部分,稍后懒加载剩余部分,从而来提升页面首次加载的性能。在 webpack 中,使用 import() 函数即可实现。

let btn = document.createElement('button')
btn.innerHTML = '按钮1'

btn.addEventListener('click', () => {
  import('./a').then(() => {
    console.log('加载完成')
  })
})

document.body.appendChild(btn)

import() 函数可以帮助你实现按需加载。Webpack 在打包时遇到 import,就会把这个模块放到单独的 chunk 中:

> npx webpack

asset bundle.js 13.3 KiB [emitted] (name: main)
asset src_a_js.bundle.js 860 bytes [emitted]
runtime modules 7.81 KiB 10 modules
cacheable modules 236 bytes
  ./src/index.js 209 bytes [built] [code generated]
  ./src/a.js 27 bytes [built] [code generated]
webpack 5.15.0 compiled successfully in 92 ms

只有当代码执行到 import() 函数时才会去下载。

这样可以让 入口 bundle 变得更小,从而减少首次加载时间。不仅如此,它还可以优化缓存,如果你修改了入口 chunk 的代码,注释 chunk 不会受到影响。

在开发模式下,webpack5 代码块 ID 默认启用了的新命名方式,算法为模块提供了人类可读的名称。 在生产模式下默认是数字的的形式。

比如在开发模式下文件是叫做 src_a_js.bundle.js 文件。在生产模式下是以 0.bundle.js 这样的形式。而 webpack4 在生产和开发都是数字形式的。

所以你不再需要使用 import(/* webpackChunkName: "name" */ "module") 来调试。 但如果你想控制生产环境的文件名,还是有意义的。

output: {
  filename: 'bundle.js',
  path: path.resolve(__dirname, 'dist'),
  chunkFilename: '[name].bundle.js'
},

通过注释改名字

import(/* webpackChunkName: "video" */ './a').then(() => {
  console.log('加载完成')
})
video.bundle.js

总结:webpack5 在开发环境下会自动命名代码块 ID 。

相关文章
|
1月前
|
缓存 JavaScript
webpack之SplitChunksPlugin
webpack之SplitChunksPlugin
19 0
|
18天前
|
前端开发 JavaScript
webpack使用
webpack使用
|
29天前
|
JSON JavaScript 前端开发
|
29天前
|
前端开发 JavaScript Linux
|
4月前
|
JavaScript 前端开发
webpack
webpack
37 0
webpack
|
8月前
|
缓存 前端开发 JavaScript
浅谈webpack
浅谈webpack
87 0
|
前端开发 JavaScript
关于 Webpack 的介绍,什么是 Webpack?
Webpack 是一款现代化的前端构建工具,它可以将你的项目中的多个 JavaScript 模块打包成一个或多个 bundle 文件,同时还可以处理各种类型的静态资源,比如 CSS、图片等等。 Webpack 最初是由 Tobias Koppers 开发的,目前已经成为了前端开发中使用最广泛的构建工具之一。
114 0
|
JavaScript 前端开发
从了解到使用webpack
Webpack本质上是一种前端资源编译,打包工具
69 0
|
前端开发 JavaScript
1、webpack
1、webpack
69 0
|
缓存 JavaScript 前端开发
Webpack
本质上,*webpack* 是一个现代 JavaScript 应用程序的*静态模块打包器(module bundler)*。当 webpack 处理应用程序时,它会递归地构建一个*依赖关系图(dependency graph)*,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 *bundle*。
Webpack