首页 > 解决方案 > 延迟路由被预取,忽略 webpack 魔术注释(Vue)

问题描述

我需要开发一个带有登录视图的服务器端身份验证应用程序。如果我想使用 Vue Router 在登录和索引(受保护的视图)之间动态切换,我需要避免登录视图在成功认证之前下载(预取)索引,因为如果没有,服务器会以登录页面响应索引预取要求。

我试图在具有两条路由的原始 Vue 路由器示例中实现这一点。家和周围。第一个包含在内,第二个是延迟加载(但预取),这将是实际应用程序中的受保护页面。

为了避免预取,我已经尝试了我发现的所有 webpack 魔术注释,但预取仍在发生。

这是代码:

import Vue from "vue"
import VueRouter from "vue-router"
import Home from "../views/Home.vue"

Vue.use(VueRouter);

const 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"*/ /* webpackMode: "lazy" */ /* webpackPrefetch: false */ /* webpackPreload: false */ "../views/About.vue")
  }
];

const router = new VueRouter({
  routes
});

export default router;

结果如下:

网络结果

我不想从常规 webpack 配置中禁用该功能,因为我希望它用于其余的应用程序链接。我只想为此链接禁用它。

我应该如何配置路由器来实现呢?

谢谢你的时间,

H25E

标签: vue.jswebpackvue-routerprefetch

解决方案


Github 上有一个讨论,它提供了一些与您的情况相关的提示。

// vue.config.js

module.exports = {
  chainWebpack: config => {
    config.plugin('prefetch').tap(options => {
      options.fileBlackList.push([/MyChunkName(.*)\.js$/]);
      return options;
    });
  }
};

Vue-CLI 默认自动预取所有动态导入 - 所以你必须添加一个黑名单。

Webpack 的神奇注释(webpackPrefetch可能webpackPreload也是)接受一个true或一个数字(索引) - 但不接受false参数。


推荐阅读