位置: 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数据)

  • 微信怎么用指纹支付设置(微信怎么用指纹付款怎么设置)

    微信怎么用指纹支付设置(微信怎么用指纹付款怎么设置)

  • word怎么做全页横线(word怎么做全页横线没有边框)

    word怎么做全页横线(word怎么做全页横线没有边框)

  • 微信如何批量删除多个聊天窗口(微信如何批量删除账单)

    微信如何批量删除多个聊天窗口(微信如何批量删除账单)

  • 华为荣耀9x充电指示灯在哪(华为荣耀9x充电器多少瓦)

    华为荣耀9x充电指示灯在哪(华为荣耀9x充电器多少瓦)

  • imx600为什么只给华为(imx600有多厉害)

    imx600为什么只给华为(imx600有多厉害)

  • 苹果4gvolte打开还是关闭

    苹果4gvolte打开还是关闭

  • apple care是什么(applecare是什么服务有用吗)

    apple care是什么(applecare是什么服务有用吗)

  • 华为p30发热怎么解决(华为手机p30发热)

    华为p30发热怎么解决(华为手机p30发热)

  • 计算机网络协议的几个要素(计算机网络协议中,不包括)

    计算机网络协议的几个要素(计算机网络协议中,不包括)

  • 蓝牙耳机充电7天忘拔(蓝牙耳机充电7小时候一直亮红灯)

    蓝牙耳机充电7天忘拔(蓝牙耳机充电7小时候一直亮红灯)

  • amd530相当于gtx多少

    amd530相当于gtx多少

  • vivox9可不可以放内存卡(vivox9可以用)

    vivox9可不可以放内存卡(vivox9可以用)

  • 微信视频可以关闭麦克风吗(微信视频可以关闭摄像头吗)

    微信视频可以关闭麦克风吗(微信视频可以关闭摄像头吗)

  • 台式固态硬盘接口有几种(台式固态硬盘接口类型及区别)

    台式固态硬盘接口有几种(台式固态硬盘接口类型及区别)

  • 淘宝锁单是什么意思啊(淘宝锁单的时间是多久)

    淘宝锁单是什么意思啊(淘宝锁单的时间是多久)

  • vivo系统相册在哪里找(vivo手机系统相册)

    vivo系统相册在哪里找(vivo手机系统相册)

  • vivox27al键是干嘛的(vivox27a1键干嘛用的)

    vivox27al键是干嘛的(vivox27a1键干嘛用的)

  • meitu是什么手机(美图是什么手机牌子)

    meitu是什么手机(美图是什么手机牌子)

  • 华为mate20有无线充电功能么(华为mate20有无线充电吗)

    华为mate20有无线充电功能么(华为mate20有无线充电吗)

  • 手机ca证书怎么删除(手机ca证书怎么申请流程)

    手机ca证书怎么删除(手机ca证书怎么申请流程)

  • 怎样把抖音完整版保存(怎样把抖音完整版分享到朋友圈)

    怎样把抖音完整版保存(怎样把抖音完整版分享到朋友圈)

  • 流量与带宽的区别与联系(网络流量和网络带宽)

    流量与带宽的区别与联系(网络流量和网络带宽)

  • 饼图如何显示百分比(饼图如何显示百分百)

    饼图如何显示百分比(饼图如何显示百分百)

  • 快手三格视频怎么制作(快手三格视频怎么剪辑)

    快手三格视频怎么制作(快手三格视频怎么剪辑)

  • 项目中报错 Uncaught (in promise)(java项目报错)

    项目中报错 Uncaught (in promise)(java项目报错)

  • 固定资产报废申请表模板
  • 滑准税是指关税的税率
  • 税后经营净利率什么意思
  • 非流动资产处置损失属于什么会计科目
  • 个人转让土地使用权
  • 简易征收类型
  • 出售本月转入处置的固定资产应交税费
  • 个体户购买社保和自由人购买社保区别
  • 自然人转让股权给自己的公司
  • 投入的流动资金函怎么写
  • 销售息税前利润是什么
  • 接受控股股东的非现金资产捐赠
  • 单位处置车辆账务处理
  • 个人取得的稿酬收入应该如何计算
  • 一个员工在两家公司上班违法吗
  • 运输营改增
  • 支付运费价税合计
  • 特殊业务分录
  • 什么凭证需要审计报告
  • 代缴水电费是什么意思
  • 房租发票进项税额抵扣
  • 职工福利费和教育费的计提比例
  • 应收账款贷方余额重分类到哪
  • linux -pv
  • 月末汇兑损益怎么算
  • 为离职员工代缴社保 论
  • 如何防御黑客入侵
  • register.exe - register进程有什么用.是什么意思
  • 预交税款分录
  • drvmgr.exe
  • 资产负债表怎么算资产负债率
  • ges.dll
  • 购进旧设备折旧年限如何计算
  • 跨省异地施工
  • 达拉斯位置
  • 直运商品委托代销商品的销售成本的计算方法应采用
  • 信托融资放在哪个科目
  • 当月缴纳上月未缴纳社保
  • 应付票据抵付应付账款会计分录
  • 消耗品算什么科目
  • react生命周期分为两类
  • 织梦最新发表的作品
  • 职工教育经费和职工福利费扣除比例
  • sql去除重复项
  • 什么是一般公共预算财政拨款
  • 开票航天信息要交年费吗
  • 哪些票据属于会计票据
  • 企业设置的坏账科目
  • 广告服务费一般几个点
  • 怎么冲减多计提的增值税
  • 自产委托加工的货物用于非增值税应税项目
  • sql语句基础题及答案
  • sqlserver如何查询表数据
  • sql server怎么向表里添加数据
  • 目前用到的两个字符
  • mysql 数据修改
  • win2008远程桌面闪退
  • windows8.
  • linux运维是必死之路
  • centos virsh
  • 微信开发者软件
  • winxp怎么自动开机
  • win7经常断网是什么原因
  • win10 rs3
  • cocos编程
  • 跑酷游戏cs
  • opengl教程48讲
  • linux shell echo
  • [置顶]bilinovel
  • linux shell脚本编程入门
  • 安卓退出界面
  • python smtpd
  • bootstrap要学到什么程度
  • 宁波地税如何网上缴费
  • 福建省地方税务局杨静
  • 扣缴义务人申报和综合所得年度自行申报
  • 广东税务个人账号注销后会怎样
  • 申报参保时间怎么填
  • 电子客票号码8768是什么
  • 预先支付货款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设