通过使用webpack进行代码打包的时候,所有的代码最终都被打包到一起,如果应用非常负责,模块也特别多的话,那么bundle体积会过大,但是大多数情况下,并不是每个模块在启动时都是必须要加载的,所用应该分包,按需加载,提高效率。webpack提供了代码分割的功能,他通过把我们的模块按照所设计的规则打包到不同的文件中,从而提高响应速度。
多入口打包
多入口打包一般适用于传统的多页应用程序,最常见的就是一个页面对应一个打包入口,对于不同页面之间,公共部分单独提取到公共的结果中。
在webpack配置文件中,设置多个入口,表示多入口文件打包,同时在输出的时候,通过占位符的方式,设置多个打包结果文件。
module.exports = {entry: {index: "./src/index.js",album: "./src/album.js"},output: {// name 指向的是入口中设置的keyfilename: '[name].bundle.js'},plugins: [new HtmlWebpackPlugin({filename: "index.html",// 选择当前html文件使用哪个打包后的文件chunks: ["index"],}),new HtmlWebpackPlugin({filename: "album.html",// 选择当前html文件使用哪个打包后的文件chunks: ["album"],}),],};
在多入口打包的时候,不同的入口中肯定会有公共模块出现,所以还需要将公共模块进行提取。
module.exports = {entry: {index: "./src/index.js",album: "./src/album.js",},output: {// name 指向的是入口中设置的keyfilename: "[name].bundle.js",},plugins: [new HtmlWebpackPlugin({filename: "index.html",// 选择当前html文件使用哪个打包后的文件chunks: ["index"],}),new HtmlWebpackPlugin({filename: "album.html",// 选择当前html文件使用哪个打包后的文件chunks: ["album"],}),],optimization: {splitChunks: {// 表示把所有的公共模块都提取到一个bundle文件当中。chunks: "all",},},};
动态导入
表示需要用到某个模块时,再加载这个模块,这样可以极大的节省我们的带宽和流量。动态导入的模块会被自动分包。
魔法注释
用于在动态导入的时候,给自动加载的bundle文件添加名称。
语法:/ webpackChunkName: index /
