單頁應用產出的入口chunk大小隨著業務的複雜度線性增加,導致後期載入速度越來越慢。後面就需要對不同路徑下的模組進行拆分,打包到相應的chunk下,按需載入,找到chunk的大小、個數和頁面載入速度的平衡點。
解決辦法
.vue模組檔案按需載入,其實要做到兩件事情:一是標記出這是乙個非同步元件;二是通知webpack把該元件單獨產出為乙個chunk。
vue的非同步元件
官網給出的非同步元件寫法:非同步元件是乙個函式,函式的返回值是乙個promise,只是promise的resolve函式的引數是常規元件的定義本身。
const asynccom = () => promise.resolve()
webpack非同步模組的引入辦法
這個對webpack不同的版本來說,用法有點區別:
webpack版本在1-2之間,可以使用require.ensure來告訴webpack引入了乙個非同步模組
require.ensure([aync_module_path], callback, chunk_name)
其實require.www.cppcns.comensure編譯後是乙個叫_webpack_require_.e的函式,其本身是乙個thenable例項,require.ensure的**放到_webpack_requirwww.cppcns.come_.e.then(fn)裡面
為了滿足以上兩個條件
const asynccom = resolve => require.ensure(, () => resolve(require(aync_module_path)), chunk_name);
webpack>=2的版本可以通過import()來指定動態引入的模組
import('./a.vue') // reldzzemnwstu程式設計客棧rns a promise
vue router中的懶載入路徑的使用辦法
// const a = resolve => require.ensure(, () => resolve(require('./a.vue')), 'a');
const a = () => import('./a.vue')
const router = new vuerouter(
]})tips
組合多個非同步模組到乙個chunk檔案
對不同路徑進行按需載入,並不一定非得每個路徑產出乙個chunk,這個還得按不同的業務和場景進行區分,有時候對於同乙個業務下的的小非同步模組可以進行合併處理。在webapck2.4時,可以在import引入的時候提供乙個/* webpackchunkname: chunk_name*/注釋,來表示chunkname,
const a = () => import(/* webpackchunkname: "group-a-b-c" */ './a.vue')
const b = () => import(/* webpackchunkname: "group-a-b-c" */ './b.vue')
ldzzemnwsconst c = () => import(/* webpackchunkname: "group-a-b-c" */ './c.vue')
// webpack.conf.js
output:
總結本文標題: vue router的懶載入路徑的解決方法
本文位址:
vue router 路由懶載入
1 通常在我們使用 vue cli 構建專案時,在預設情況下 執行npm run build 後會將專案中所有的 js 打包為乙個整體。而且這個包體積會非常的大。導致我們在進入首頁時會載入的非常慢。即使初始化有 loading 效果,也不利於使用者體驗。所以這是就體現出懶載入 延遲載入 的重要性。所...
Vue Router(路由懶載入)
常用的路由懶載入方式 1 vue非同步元件 非同步載入 2 路由懶載入 使用import vue非同步元件 非同步載入 vue router配置路由 使用vue的非同步元件技術 可以實現按需載入 但是,這種情況下,webpack打包時乙個元件生成乙個js檔案,即每載入乙個元件都需要載入乙個新的js檔...
vue router路由懶載入
方式一 結合vue的非同步元件和webpack的 分析 const home resolve 方式二 amd寫法 const about resolve require components about.vue resolve 方式三 在es6中,我們可以有更加簡單的寫法來組織vue非同步元件和we...