使用 Webpack 2 延迟加载 Vue 组件

Posted

技术标签:

【中文标题】使用 Webpack 2 延迟加载 Vue 组件【英文标题】:Lazy Loading Vue Components with Webpack 2 【发布时间】:2017-07-10 04:15:18 【问题描述】:

我希望通过webpack 尝试延迟加载。我按路线拆分我的应用程序,每条路线都有所需的组件:

const Home = resolve =>   
    require.ensure([ "../components/Home/Home.vue" ], () => 
        resolve(require("../components/Home/Home.vue"));
    );
;

每次我去不同的路线时,我都会将我的块放在不同的文件夹中: bundle1.js, bundle2.js, bundle3.js 为路由中的每个组件启用。

现在我不知道如何仅加载该路线所需的捆绑包?如果我将 bundle.js 放在 index.html 中,它将加载整个包,但我只想加载该路由所需的唯一包?

  <body>
    <div id="app"></div>
    <!-- how to auto inject build files here?? -->
  </body>

对于 Vue 组件有 Lazy Loading 部分。我这样做了,我得到了大块的捆绑文件。 但我不知道包含并加载它们的正确方法是什么

感谢任何帮助。谢谢

【问题讨论】:

你在使用 vue-cli 和 webpack 吗? 不,我想自己设置项目。 【参考方案1】:

您可以在此处找到有关如何实现该功能的文档:

    https://router.vuejs.org/en/advanced/lazy-loading.html https://vuejs.org/v2/guide/components.html#Async-Components

【讨论】:

用户知道在哪里可以找到所述文档,他们确实引用了您的链接之一。【参考方案2】:

我们可以轻松实现延迟加载,这要归功于即将推出的 javascript 功能,即 webpack 支持的动态导入。

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

function loadView(view) 
  return () => import(/* webpackChunkName: "view-[request]" */ `@/views/$view.vue`)


export default new Router(
  routes: [
    
      path: '/',
      name: 'home',
      component: loadView('Home')
    ,
    
      path: '/about',
      name: 'about',
      component: loadView('About')
    
  ]
)

当然这个答案来自this article,我建议你阅读它。

【讨论】:

以上是关于使用 Webpack 2 延迟加载 Vue 组件的主要内容,如果未能解决你的问题,请参考以下文章

Vue2 - 路由级别的延迟加载不起作用?

如何通过 vue-class-component 使用 Vue Router 延迟加载?

无法从嵌套组件中的资产文件夹加载图像(Vue.js 2.0 / Webpack)

组件懒加载

在 Laravel 应用程序中延迟加载 vue 组件 - 不加载

Vue3 中使用 defineAsyncComponent 延迟加载组件