位置: IT常识 - 正文

新安webpack插件后编译报错compiler.plugin is not a function(webpack插件执行顺序)

编辑:rootadmin
新安webpack插件后编译报错compiler.plugin is not a function

推荐整理分享新安webpack插件后编译报错compiler.plugin is not a function(webpack插件执行顺序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:webpack5安装,webpack常用插件和loader,webpack常用插件以及作用,webpack安装,webpack常用插件以及作用,webpack安装,webpack插件怎么写,webpack插件怎么写,内容如对您有帮助,希望把文章链接给更多的朋友!

        安装使用generate-asset-webpack-plugin时报错TypeError:compiler.plugin is not a function,网上搜索了一下大概就是webpack5与这些插件不匹配。推荐的方法几乎都是换一个适配的插件版本,但我所需要的这个插件在npm上最近更新时间是7年前💔。等不着作者适配于是决定自己改。

 先看解决办法:主要也只是webpack升级后,触发钩子的写法变了而已

        找到报错的文件,搜索“compiler.plugin”定位到问题所在,修改写法(如下),打个补丁,提交一下✔️。

原先代码:

compiler.plugin('emit', function (compilation, cb) {})

修改后:

compiler.hooks.emit.tapAsync('GenerateAssetWebpackPlugin',(compilation,callback)=>{})

 在接触到问题之前对于webpack的使用仅在于配置代理服务器 😢 ,后面就大概记录一下修改的思考过程与新get到的知识点。【以下的“类似于”仅因为自己接触知识点的前后顺序,不在于本身发布前后顺序,我猜测wabpack肯定比vue早出现😂】

🌷 看到compiler的时候还不知道这是个啥东西,怎么就调了一个plugin方法。在当前文件没搜到后就开始了百度之旅(刚开始还以为plugin是创作者自定义的)。然后就了解到webpack的Compiler与Compilation 对象,个人理解Compiler粒度更大,类似于编译器实例,生命周期类似于APP的应用周期,整个生命周期只会执行一次(惨兮兮只有一条命)。

🌷 plugin是定义在webpack原型apply上的一个方法,用于调用webpack的钩子函数(类似于vue中mounted、created这种函数,会在特定的时间段进行调用),第一个参数为钩子函数名称,第二个参数为回调函数。关于钩子的种类及定义可查看文档compiler 钩子

新安webpack插件后编译报错compiler.plugin is not a function(webpack插件执行顺序)

 🌷 但在webpack5中,plugin方法被取消了!所以报错is not a function。输出一下complier对象也会发现无这个属性【具体complier有什么属性可以看看依赖里的这个文件node_modules\webpack\lib\Compiler.js)

🌷 既然触发生命周期的方法变了,更新一下为最新版本的写法就好了。查看文档作出修改,至少问题就解决了~

 看一下源码部分,以便更好的理解(node_modules\webpack\lib\Compiler.js)在类中一开始就定义了一个不可修改的钩子函数集合hooks,所以会区分complier钩子与compilation钩子。毕竟complier和compilation是两个不同类这里new的AsyncSeriesHook 又是什么​呢?字面意思是异步串行钩子,搜一下

 所以这里输出的这些函数都是tapable中的😮,具体看文档  tapable,简单过一下定义后就看看那个插件generate-asset-webpack-plugin吧。webpack太长了关于其什么阶段调用了什么钩子就等把webpack基础概念和原理补完再看👻

generate-asset-webpack-plugin

         这个代码挺少就看完了,查看官网自定义插件。自定义插件 | webpack 中文文档 | webpack 中文文档 | webpack 中文网

🧩 一个 JavaScript 命名函数或 JavaScript 类。

🧩 在插件函数的 prototype 上定义一个 apply 方法。

🧩 指定一个绑定到 webpack 自身的事件钩子。【这里就是指定的emit钩子

🧩 处理 webpack 内部实例的特定数据。【使用fs模块处理的

🧩 功能完成后调用 webpack 提供的回调。【callback结束异步操作

        其他的还好,主要是不理解为什么不直接在插件函数原型上定义apply ,而要去调用一个自执行函数并使用 defineProperty给apply方法定义一些数据属性,是为了将apply()方法做响应式嘛?😵是的话这么做有啥好处呢?

本文链接地址:https://www.jiuchutong.com/zhishi/296079.html 转载请保留说明!

上一篇:携程网移动端首页制作(html5+css3)(携程首页)

下一篇:vue3-setup语法糖之组件传参(defineProps、defineEmits、defineExpose)(vue3setup语法糖如何定义realtive数据)

  • 华为nova5pro的耳机插在哪(华为手机耳机孔在哪里nova5 pro)

    华为nova5pro的耳机插在哪(华为手机耳机孔在哪里nova5 pro)

  • 微信添加朋友,未通过的记录在哪里看(微信添加朋友操作频繁怎么解决)

    微信添加朋友,未通过的记录在哪里看(微信添加朋友操作频繁怎么解决)

  • qq会自动删除好友吗(qq自动删除好友是怎么回事)

    qq会自动删除好友吗(qq自动删除好友是怎么回事)

  • 荣耀9x升降屏是啥意思(荣耀九x升降式摄像头怎么开启)

    荣耀9x升降屏是啥意思(荣耀九x升降式摄像头怎么开启)

  • mifi设备是什么(mifi是什么)

    mifi设备是什么(mifi是什么)

  • 显示器dvi无信号(显示器dvi无信号怎么办)

    显示器dvi无信号(显示器dvi无信号怎么办)

  • pckmoo是哪款手机型号(pccmoo是什么手机)

    pckmoo是哪款手机型号(pccmoo是什么手机)

  • 华为蓝牙鼠标突然没反应(华为蓝牙鼠标突然不灵敏了)

    华为蓝牙鼠标突然没反应(华为蓝牙鼠标突然不灵敏了)

  • 华为nova6开机键在哪(华为nova6开机键发烫是怎么回事)

    华为nova6开机键在哪(华为nova6开机键发烫是怎么回事)

  • 不想看到微信好友发来的信息怎么办(不想看到微信好友的朋友圈怎么办)

    不想看到微信好友发来的信息怎么办(不想看到微信好友的朋友圈怎么办)

  • 健康码必须用本人手机吗(健康码必须用本地的吗)

    健康码必须用本人手机吗(健康码必须用本地的吗)

  • 键盘强制关机键是什么(键盘强制关机键是哪个键)

    键盘强制关机键是什么(键盘强制关机键是哪个键)

  • iphone已停用一个小时再试(iphone已停用一个小时,想起密码可以用吗)

    iphone已停用一个小时再试(iphone已停用一个小时,想起密码可以用吗)

  • 退出家人共享对方有提示吗(退出家庭共享之后相册里的照片)

    退出家人共享对方有提示吗(退出家庭共享之后相册里的照片)

  • mate30闪光灯下面的白点(mate30pro闪光灯下面白点)

    mate30闪光灯下面的白点(mate30pro闪光灯下面白点)

  • 屏蔽和拉黑的区别(屏蔽和拉黑的区别微信)

    屏蔽和拉黑的区别(屏蔽和拉黑的区别微信)

  • 举报qq群会不会被知道(举报qq群会被发现吗)

    举报qq群会不会被知道(举报qq群会被发现吗)

  • 快手私密作品怎么解除(快手私密作品怎么改音乐)

    快手私密作品怎么解除(快手私密作品怎么改音乐)

  • 微信为什么停止计步(微信为什么停止红米note8Pro语音通知)

    微信为什么停止计步(微信为什么停止红米note8Pro语音通知)

  • 荣耀9xpro参数(下一页p30)

    荣耀9xpro参数(下一页p30)

  • 酷狗音乐歌词怎么全屏(酷狗音乐歌词怎么显示屏幕)

    酷狗音乐歌词怎么全屏(酷狗音乐歌词怎么显示屏幕)

  • 怎么下载淘宝上的视频(怎么下载淘宝上的短视频)

    怎么下载淘宝上的视频(怎么下载淘宝上的短视频)

  • 电话卡欠费影响征信吗(电话卡欠费影响信用吗)

    电话卡欠费影响征信吗(电话卡欠费影响信用吗)

  • 美团怎么参加别人的团(美团怎么参加别人发起的拼场活动)

    美团怎么参加别人的团(美团怎么参加别人发起的拼场活动)

  • vivo手机怎么扫描文件(vivo手机怎么扫描)

    vivo手机怎么扫描文件(vivo手机怎么扫描)

  • 苹果相册人物怎么增加(苹果相册人物怎么关闭,删了又有)

    苹果相册人物怎么增加(苹果相册人物怎么关闭,删了又有)

  • 爱奇艺号视频审核标准是什么(爱奇艺视频审核员工资)

    爱奇艺号视频审核标准是什么(爱奇艺视频审核员工资)

  • 营改增后企业所得税分成比例
  • 差额征税怎么填写申报表
  • 出口退税不退税主要适用于
  • 自然人城建税减半征收
  • 长期挂账应收账款怎么调
  • 购买完货物又退回怎么办
  • 计提福利是什么
  • 汇算清缴补交需要调报表吗
  • 返利失效了怎么找回
  • 印花税计入税金及附加吗
  • 债券的实际发行价格为什么
  • 未及时申报个税的理由
  • 收代扣代收代征手续费会计分录
  • 企业所得税发票虚假成本调减当年的吗
  • 股东房产无偿给公司使用协议
  • 制造费用明细科目有哪些
  • windows10如何开启vt
  • 此 google 帐号尚未与设备关联
  • php经典教程
  • 公司收到医疗保障局打入的钱怎么做账
  • 个人销售自建自用住房解读
  • 在暴风雪中求生
  • 前端cli搭建
  • rgb to hex
  • 100多年前程序员
  • 列表定义格式
  • php隐藏跳转
  • 天猫一般纳税人如何纳税
  • 节假日加班工资是几倍
  • 发票入账怎么做分录
  • 营业外支出科目代码
  • 企业的借款利息可能计入哪些账户
  • 帝国cms文件夹介绍
  • 物流公司驾驶员工资计算方式
  • 进账加计抵减政策
  • 发票报销有时间期限吗
  • mysql客户端程序的功能是什么
  • 存货是指企业在生产经营过程中为销售或耗用
  • 企业促销费用项目有哪些
  • 已认证的红字发票怎么开
  • 过次页和承前页怎么算
  • 个体户能开增票吗?
  • 收到合同后的整个流程
  • 结转成本涉及的科目
  • 小规模物业广告怎么写
  • 关于废止有关排污收费规章和规范性文件的决定
  • mysql提高效率
  • windows11技术预览版
  • ubuntu怎么把软件放到桌面
  • 无法打开vmx86
  • win8一键恢复出厂设置
  • 阿里云安装
  • win10怎么设置net3.5
  • ubuntu系统怎么修改root密码
  • downloader.exe是什么
  • 本地hosts文件存在问题
  • 支持iphone
  • win8系统怎么搜索文件
  • Win10 Mobile 10586无法更新应用怎么办 一招教你解决
  • xshell远程桌面
  • 预装win7旗舰版
  • win10 提示
  • 怎样判断滚动和滑动
  • Extjs TriggerField在弹出窗口显示不出问题的解决方法
  • opengl矩形
  • nodejs处理excel
  • rpg游戏脚本已经被备份
  • python3遍历
  • unity 3d ui
  • 从零开始的基础篇
  • js金额加减
  • 安卓软件测试
  • python利用matplotlib库绘制六边形
  • JavaScript+html5 canvas绘制渐变区域完整实例
  • javascript零基础入门书籍
  • Python中列表元素可通过什么访问
  • 小规模开票限额最新规定2022
  • 网上税务局电子发票怎么领用
  • 税务备案表银行留存
  • 大乐透中奖查询走势图
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设