Vue 在第一个请求时加载所有块

mar*_*lle 4 router lazy-loading vue.js

我正在学习 Vue,刚刚进入路由章节。我可以使用 vue/cli 创建一个具有初始路由器配置的模板项目。这是路由器代码:

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
    },
    {
      path: '/about',
      name: 'about',
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
    },
  ],
});
Run Code Online (Sandbox Code Playgroud)

根据代码和文档的注释,这应该足以延迟加载“关于”组件。

当我尝试加载应用程序页面时,会获取“about.js”脚本:

关于代码不延迟加载

如果我导航到“关于”,浏览器将从磁盘缓存中获取脚本:

在此输入图像描述

我很困惑。我期望只有在导航到“关于”页面后才能看到加载的脚本 about.js。我错过了什么吗?

mar*_*lle 7

@TJWeems 指出的讨论非常明确。

使用 webpack-chain 禁用预取插件后,我获得了预期的行为。我刚刚在我的根目录上创建了一个vue.config.js(与 package.json 相同),内容如下:

module.exports = {
    chainWebpack: (config) => {
        config.plugins.delete('prefetch');
    }
};
Run Code Online (Sandbox Code Playgroud)

请记住,我这样做是出于好奇。我可能会在未来的项目中启用预取插件,并考虑在特定情况下禁用它。