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

  • 支付宝定制项链怎么弄(支付宝定制项链质量怎么样)

    支付宝定制项链怎么弄(支付宝定制项链质量怎么样)

  • 笔记本怎么变成wifi路由器(笔记本变成无线路由)(笔记本怎么变成平板模式)

    笔记本怎么变成wifi路由器(笔记本变成无线路由)(笔记本怎么变成平板模式)

  • 荣耀x20怎么关闭横屏(荣耀x20怎么关闭5g网络)

    荣耀x20怎么关闭横屏(荣耀x20怎么关闭5g网络)

  • ipad如何取消自动续费(ipad如何取消自动更新系统)

    ipad如何取消自动续费(ipad如何取消自动更新系统)

  • 指纹锁隔一会就滴滴响(指纹锁每隔一段时间就失灵)

    指纹锁隔一会就滴滴响(指纹锁每隔一段时间就失灵)

  • 充电宝发热是怎么回事(充电宝发烫)

    充电宝发热是怎么回事(充电宝发烫)

  • 2.1a充电器是什么意思(2.1a的充电器)

    2.1a充电器是什么意思(2.1a的充电器)

  • 快手该身份证已被注册(快手身份证已被使用怎么办现在不能注册了)

    快手该身份证已被注册(快手身份证已被使用怎么办现在不能注册了)

  • 华为步数不显示了(华为步数不显示时段)

    华为步数不显示了(华为步数不显示时段)

  • 三星a70s安兔兔跑分(三星tab a7安兔兔)

    三星a70s安兔兔跑分(三星tab a7安兔兔)

  • 手机为什么下载软件安装不了(手机为什么下载不了应用宝)

    手机为什么下载软件安装不了(手机为什么下载不了应用宝)

  • 手机怎么交座机话费(怎么在手机上给座机交话费)

    手机怎么交座机话费(怎么在手机上给座机交话费)

  • vivos5怎么切换输入法(vivo如何切换输入法?)

    vivos5怎么切换输入法(vivo如何切换输入法?)

  • 高德地图怎么切换横屏(高德地图怎么切换卫星地图)

    高德地图怎么切换横屏(高德地图怎么切换卫星地图)

  • 小米6插电脑无法识别(小米插电脑无法识别)

    小米6插电脑无法识别(小米插电脑无法识别)

  • qq注销好友显示什么(如果注销qq,好友那边怎么显示)

    qq注销好友显示什么(如果注销qq,好友那边怎么显示)

  • 苹果手机诊断在哪(苹果手机诊断在哪里设置)

    苹果手机诊断在哪(苹果手机诊断在哪里设置)

  • 剪映怎么给视频加音乐字幕(剪映怎么给视频加旁白)

    剪映怎么给视频加音乐字幕(剪映怎么给视频加旁白)

  • mrjn2ch/a是什么型号(mrw2是啥)

    mrjn2ch/a是什么型号(mrw2是啥)

  • 索尼xperia1如何开启开发者选项

    索尼xperia1如何开启开发者选项

  • 华为coltl10是什么型号(华为coral10是什么型号手机)

    华为coltl10是什么型号(华为coral10是什么型号手机)

  • vga接口定义详细解释(vga接口定义详细教程)

    vga接口定义详细解释(vga接口定义详细教程)

  • 闲鱼怎么拉进黑名单(闲鱼怎么拉入黑名单)

    闲鱼怎么拉进黑名单(闲鱼怎么拉入黑名单)

  • 在win7中,浏览网页总弹出脚本调试器的原因是什么?(win7如何调出浏览器)

    在win7中,浏览网页总弹出脚本调试器的原因是什么?(win7如何调出浏览器)

  • Python-split()函数用法及简单实现(python中的split函数)

    Python-split()函数用法及简单实现(python中的split函数)

  • 电子商务税收的特征有哪些?
  • 纳税信用等级是专管员评的吗
  • 我国当前税制结构的基本情况是怎样的
  • 企业注销,账面余额怎样调账
  • 公司组织旅游的费用要交个税
  • 小规模企业所得税计算
  • 小规模纳税人增值税优惠政策2023
  • 纳税人转登记期限
  • 商场做促销
  • 转账支票支付展览费
  • 税收成本如何影响税收管理制度
  • 电子普通发票需要盖章吗
  • 关于保险机构代收车船税开具增值税发票问题的公告
  • 哪些情况下,企业需要进行分销渠道设计决策
  • 商铺 公司
  • 营改增的作用
  • 保险代理人佣金的规定
  • 以库存抵债的账务处理
  • 商业土地厂房办公房过户需要交什么税?
  • 污水处理增值税征收品目
  • 建筑业工人工资保障
  • 收到增值税发票怎么记账
  • 包装本公司产品的出口包装物是否缴增值税?
  • 如何正确核算出租房屋所应交的房产税?
  • 物物交换增值税处理
  • 如果被客户骗了货款怎么办
  • 弥补以前年度亏损是什么意思
  • vue2-elm
  • 签发商业承兑汇票计入什么科目
  • linux如何放大字体
  • 人工智能导论报告
  • win11预览版选哪个
  • linux的安装和使用
  • 中秋购物
  • 增值税的计税依据包括消费税吗
  • 农村自建房买卖怎样才合法
  • 从银行提取现金准备发放工资
  • ErrorCaptureStackTrace(err); Error [ERR_MODULE_NOT_FOUND]: Cannot find module
  • 甘油三血脂高怎么办
  • 现金流量表补充资料怎么理解
  • 小规模纳税人本年累计金额
  • JS之location对象详解
  • 什么情况下可以赔偿n+1
  • vscode2010下载
  • timit数据集
  • 阿里pv
  • php 银行卡支付
  • 不发工资可以交五险一金吗
  • 合作社计提工资
  • 建筑企业提供服务的机制保障
  • 资产负债表中利息收入填在哪
  • 写字楼租金
  • 逃税是什么意思?
  • 刷单成本计入什么费用?
  • 支持疫情的句子 关于抗击疫情的句子
  • 退货收到红字发票怎么办
  • 取得股东借给公司股权
  • 现金支票存根联丢失怎么办
  • 经纪代理代订机票差额专票抵扣
  • 人力资源公司可以开培训费发票吗
  • 营业费用属于什么类账户
  • 旅游饮食服务企业的特点包括
  • 数据库left joins
  • centos搭建svn服务器
  • bios怎么设置efi引导
  • 电脑卡 硬盘100%
  • xp安装磁盘格式
  • linux之间拷贝文件
  • windows10x预览版
  • Olehelp.exe - Olehelp是什么进程 有什么用
  • win10mobile最新版本
  • 常用的linux命令大全
  • [android] android开发中常用的Eclipse快捷键
  • 传智播客javappt
  • jquery validator
  • Python编程中的逻辑与控制
  • android多个dex
  • 重庆沙坪坝区沙磁巷幼儿园
  • 个体开专用票需要进项吗
  • 供给侧改革什么样的劳动力
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设