动态导入,ECMAScript import() 提案
ECMAScript 有一项允许使用 import() 方法传入 url 返回 Promise 动态导入 ES 模块的提案。已经进入 stage 4(Finished) 阶段,等待加入标准。
示例
1  | import("https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.esm.browser.js").then(  | 
Webpack 提供了 import() 语法,但是 Webpack 并不支持网络模块的导入。 Webpack 可以以本地路径或项目中安装的模块名动态导入模块。
示例:
1  | import("./a.js") // 本地路径  | 
注: 使用 Webpack 的 import() 传递动态的本地 path 需要一些技巧
Vue Router
Vue Router 配置的 component 属性支持传递一个返回 Promise 的方法,在匹配到路由准备渲染组件前会掉用此方法加载组件。
示例:
1  | const Foo = () => import("./Foo.vue");  | 
组件加载状态
Vue 函数式组件的 createElemnt (即 h)方法的第一个参数支持传递一个指定异步渲染的组件、加载时渲染的组件和加载失败渲染的组件的对象。我们可以据此创建一个懒加载容器组件。
1  | async function lazyLoadView(AsyncView) {  | 
然后修改路由配置:
1  | const router = new VueRouter({  |