Error: Cannot call .tap() on a plugin that has not yet been defined. Call plugin(‘preload‘).use(<Plu

本来没打算写这篇的,但是看到上一篇写的那种低级解决方法都有人点赞,瞬间动力满满,就写了,不废话,开干

报错的整体内容如下

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

大家在搜这个报错时,应该会先看高点击量的那几篇,我这篇主要是解决这几篇文章的评论区的这个问题,如下图

但是可能有的小伙伴没看过那几篇文章就来看我这篇,所以我决定写总结版的

以下正文


这个报错是在vue.config.js文件中的,位于项目的根目录处,打开这个文件

大家应该能找到和我一样的代码块

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

接着我要把代码改成下面的形式,如下图

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

大家仔细观察会发现,其实不一样的地方是config.plugin('')这个单引号之间的内容,它们的格式都是'preload-xxx',那这个xxx在哪看呢?

我们需要在终端输入以下命令查看

vue inspect

接着就会出现很长一段的界面,大家不用慌,我们先找到plugins这个数组(在界面偏下的位置),如下图

接着我们需要找下面这几个关键字

config.plugin('   ')

看我上面的截图,黄色框框住的东西就是我们要写在下图红框的,你的界面有几个黄框的东西就写几个这样配置(记住是写在chainWebpack(config){ } 里面的!!)

以上就是高点击量文章的步骤

我当时写完所有配置,报错就变成了如下

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

 这时候就不单单是拆分配置的问题了,直接操作

首先在文件最外层(就是写在module.exports={ }外面),写如下定义

const PreloadWebpackPlugin = require('@vue/preload-webpack-plugin')

 在这如果报错的,可以去package.json文件的’devDependencies‘中找找自己有没有配置@vue/preload-webpack-plugin,如果没配置执行下面的命令

npm install --save-dev @vue/preload-webpack-plugin

//或者

yarn add --dev @vue/preload-webpack-plugin

接着在module.exports={ }里面找到 configureWebpack:{ },补充成下面的样子

configureWebpack: { 
    plugins: [
      new PreloadWebpackPlugin({
        rel: 'preload',
        fileBlacklist: [/.*\.(js|map|css)$/]
      })
    ]
  }

 接着再打开我们在上边配置好的代码块

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

在所有配置的 .tap 前加上 .use(PreloadWebpackPlugin),变成下面这样(记得是全部配置好的都要加上)

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

然后我的报错就解决了

文章可能会有用词不规范的地方希望理解(因为有的东西我不知道要叫啥),有错误的地方还望指出~ 本文几乎都是教操作 没讲原理,其实我能讲出大概原理,但是!只是我脑子里想到的原理,没有文件支撑,加上我是小白,怕理解错了说出来误导大家,所以就不讲了,希望能帮助到大家~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值