當打包構建應用時,Javascript 包會變得非常大,影響頁面加載。如果我們能把不同路由對應的組件分割成不同的代碼塊,然后當路由被訪問的時候才加載對應組件,這樣就更加高效了。
1. 安裝 syntax-dynamic-import 插件
如果在 vue-cli 使用了 babel ,需要添加 syntax-dynamic-import
插件,才能使 Babel 可以正確地解析語法。
$ npm install --save-dev @babel/plugin-syntax-dynamic-import
安裝完成后,配置文件 babel.config.js
module.exports = {
"presets": [
"@vue/app"
],
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
},
"syntax-dynamic-import"
]
]
}
2. 修改路由配置
在 router.js 中的組件引用,作如下改動:
// import Login from '@/views/users/Login'
// import Register from '@/views/users/Register'
// import Home from './views/Home.vue'
// import Report from '@/views/Report.vue'
const Login = () => import(/* webpackChunkName: "users" */ '@/views/users/Login.vue')
const Register = () => import(/* webpackChunkName: "users" */ '@/views/users/Register.vue')
const Home = () => import(/* webpackChunkName: "home" */ '@/views/Home.vue')
const Report = () => import(/* webpackChunkName: "report" */ '@/views/Report.vue')
其中 /* webpackChunkName: "home" */
是一個特殊的注釋語法,用來提供 chunk name (需要 Webpack > 2.4)。上面處理后,打包的dist目錄下的文件如下:
dist/js/chunk-vendors.70d314fb.js
dist/js/app.ff1d5c7f.js
dist/js/report.6c761e68.js
dist/js/home.fe0e7528.js
dist/js/users.ade47d0f.js
dist/css/chunk-vendors.a33b2b12.css
dist/css/app.133be4a7.css
dist/css/report.1d10a2c7.css
dist/css/users.c53bf6b0.css
dist/css/home.122162a2.css