动态导入,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({ |