Vue Cli 配置多入口报错解决办法 Cannot call .tap() on a plugin that has not yet been defined

本文探讨了在Vue CLI多入口项目中遇到的preload插件报错,如何通过为每个入口单独配置preload并修复默认入口问题。文章还介绍了配置runtimeChunk以避免运行时错误,并给出了相关解决方案和配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目做多入口, 默认入口为index时启动出现如下报错:

Error: Cannot call .tap() on a plugin that has not yet been defined. Call plugin('preload').use(<Plugin>) first. 

错误代码:

// vue.config.js
module.exports = {
  pages: {
    index: {
      entry: "src/main.js",
    },
    qr: {
      entry: "src/qr.main.js",
    },
  },

  chainWebpack(config) {
    config.plugin("preload").tap(() => [
      {
        rel: "preload",
        fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
        include: "initial",
      },
    ]);
  },
};

解决办法:

// vue.config.js
module.exports = {
  pages: {
    index: {
      entry: "src/main.js",
    },
    qr: {
      entry: "src/qr.main.js",
    },
  },

  chainWebpack(config) {
    config.plugin("preload-index").tap(() => [
      {
        rel: "preload",
        fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
        include: "initial",
      },
    ]);
    config.plugin("preload-qr").tap(() => [
      {
        rel: "preload",
        fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
        include: "initial",
      },
    ]);
  },
};

原因vue cli文档给出了解释:

配置参考 | Vue CLI 当在 multi-page 模式下构建时,webpack 配置会包含不一样的插件 (这时会存在多个 html-webpack-plugin 和 preload-webpack-plugin 的实例)。如果你试图修改这些插件的选项,请确认运行 vue inspect

而在百度上流行的添加.use(HtmlWebpackPlugin)的方法是错误的, 他可以运行,但是index默认地址栏隐形入口就失效了.

*** 如果npm run build 时构建失败提示有关runtime报错等等, 解决办法如下:

chainWebpack(config) { 
    // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
    config.optimization.runtimeChunk = {
      name: (entrypoint) => `runtime~${entrypoint.name}`,
    };
}

 

拓展:

vue-cli3中关于prefetch、preload和路由懒加载的研究 - 百度文库

vue.config.js 配置了 pages index 后,config.plugin('html') 无效 - SegmentFault 思否

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜樂的CC

年龄大身体差但记得你的打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值