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 。

相关文章
|
2月前
|
JavaScript 前端开发
webpack快速使用
webpack快速使用
171 63
|
6月前
|
前端开发 JavaScript
webpack使用
webpack使用
|
6月前
|
JSON JavaScript 前端开发
Webpack详解(二)
Webpack详解
182 0
|
6月前
|
前端开发 JavaScript Linux
|
11月前
|
JavaScript 前端开发
webpack
webpack
58 0
webpack
|
6月前
|
前端开发 JavaScript 测试技术
对Webpack的理解
对Webpack的理解
44 0
|
JSON 缓存 前端开发
webpack相关详细讲解。
webpack相关详细讲解。
|
缓存 前端开发 JavaScript
浅谈webpack
浅谈webpack
104 0
|
JavaScript 前端开发
从了解到使用webpack
Webpack本质上是一种前端资源编译,打包工具
103 0
|
缓存 JavaScript 前端开发
Webpack
本质上,*webpack* 是一个现代 JavaScript 应用程序的*静态模块打包器(module bundler)*。当 webpack 处理应用程序时,它会递归地构建一个*依赖关系图(dependency graph)*,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 *bundle*。
Webpack