本节课讲解
webpack4打包单页应用过程中的代码分割和代码懒加载。不同于多页面应用的提取公共代码,单页面的代码分割和懒加载不是通过webpack配置来实现的,而是通过webpack的写法和内置函数实现的。
目前webpack针对此项功能提供 2 种函数:
import(): 引入并且自动执行相关 js 代码require.ensure(): 引入但需要手动执行相关 js 代码本文将会进行逐一讲解。
本节课讲解
webpack4打包单页应用过程中的代码分割和代码懒加载。不同于多页面应用的提取公共代码,单页面的代码分割和懒加载不是通过webpack配置来实现的,而是通过webpack的写法和内置函数实现的。
目前webpack针对此项功能提供 2 种函数:
import(): 引入并且自动执行相关 js 代码require.ensure(): 引入但需要手动执行相关 js 代码本文将会进行逐一讲解。
此次代码的目录结构如下:
其中,page.js是入口文件,subPageA.js和subPageB.js共同引用module.js。下面,我们按照代码引用的逻辑,从底向上展示代码:
module.js:
export default "module";subPageA.js:
import "./module";
console.log("I'm subPageA");
export default "subPageA";subPageB.js:
import "./module";
console.log("I'm subPageB");
export default "subPageB";请注意:subPageA.js 和 subPageB.js 两个文件中都执行了console.log()语句。之后将会看到import()和require()不同的表现形式:是否会自动执行 js 的代码?
下面编写webpack配置文件(很简单):
const webpack = require("webpack");
const path = require("path");
module.exports = {
entry: {
page: "./src/page.js" //
},
output: {
publicPath: __dirname + "/dist/",
path: path.resolve(__dirname, "dist"),
filename: "[name].bundle.js",
chunkFilename: "[name].chunk.js"
}
};同时,关于第三方库,因为要在page.js中使用lodash,所以,package.json文件配置如下:
{
"devDependencies": {
"webpack": "^4.15.1"
},
"dependencies": {
"lodash": "^4.17.10"
}
}import()编写page.js我个人是非常推荐import()写法,因为和 es6 语法看起来很像。除此之外,import()可以通过注释的方法来指定打包后的 chunk 的名字。
除此之外,相信对vue-router熟悉的朋友应该知道,其官方文档的路由懒加载的配置也是通过import()来书写的。
下面,我们将书写page.js:
import(/* webpackChunkName: 'subPageA'*/ "./subPageA").then(function(subPageA) {
console.log(subPageA);
});
import(/* webpackChunkName: 'subPageB'*/ "./subPageB").then(function(subPageB) {
console.log(subPageB);
});
import(/* webpackChunkName: 'lodash'*/ "lodash").then(function(_) {
console.log(_.join(["1", "2"]));
});
export default "page";命令行中运行webpack,打包结果如下:
我们创建index.html文件,通过