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

  • 空调制热效果差是咋回事(空调制热效果差的原因)(空调制热效果差是什么原因造成的)

    空调制热效果差是咋回事(空调制热效果差的原因)(空调制热效果差是什么原因造成的)

  • 小天鹅洗衣机显示f8什么故障(小天鹅洗衣机显示f8)

    小天鹅洗衣机显示f8什么故障(小天鹅洗衣机显示f8)

  • 微信如何下载电子身份证(微信如何下载电脑版)

    微信如何下载电子身份证(微信如何下载电脑版)

  • 怎么把四个图片拼一起(怎么把四个图片合成一个)

    怎么把四个图片拼一起(怎么把四个图片合成一个)

  • xr来电话有闪光灯吗(iphone xr 来电闪光)

    xr来电话有闪光灯吗(iphone xr 来电闪光)

  • jeet耳机是哪个公司的(jeet耳机好吗)

    jeet耳机是哪个公司的(jeet耳机好吗)

  • 手机看rmvb格式用什么播放器(手机rmvb格式用什么播放器打开)

    手机看rmvb格式用什么播放器(手机rmvb格式用什么播放器打开)

  • 乐动力步数不上传微信(乐动力的步数和微信步数不一样是为什么)

    乐动力步数不上传微信(乐动力的步数和微信步数不一样是为什么)

  • 荣耀30耳机孔在哪里(荣耀30耳机孔在哪个地方)

    荣耀30耳机孔在哪里(荣耀30耳机孔在哪个地方)

  • 微信打招呼一天多少次(微信打招呼一天最多可以几个人?)

    微信打招呼一天多少次(微信打招呼一天最多可以几个人?)

  • ipad连校园网不弹出登录页面(ipad连校园网不出登录界面)

    ipad连校园网不弹出登录页面(ipad连校园网不出登录界面)

  • 电信4g套餐能用5g网络吗(电信用5g手机4g套餐能用5g吗)

    电信4g套餐能用5g网络吗(电信用5g手机4g套餐能用5g吗)

  • 爱奇艺怎么下载超清电视剧(爱奇艺怎么下载视频到本地)

    爱奇艺怎么下载超清电视剧(爱奇艺怎么下载视频到本地)

  • 怎么隐藏qq相册自己都看不到(怎么隐藏qq相册别人看不到)

    怎么隐藏qq相册自己都看不到(怎么隐藏qq相册别人看不到)

  • 为什么wifi满格却上不了网(为什么wifi满格信号网速很慢)

    为什么wifi满格却上不了网(为什么wifi满格信号网速很慢)

  • 戴尔笔记本u盘启动快捷键(戴尔笔记本u盘启动按什么键)

    戴尔笔记本u盘启动快捷键(戴尔笔记本u盘启动按什么键)

  • 手机怎么弄彩虹电量(手机怎么照彩虹)

    手机怎么弄彩虹电量(手机怎么照彩虹)

  • 乐视手机怎样录屏(乐视手机录音功能在哪里)

    乐视手机怎样录屏(乐视手机录音功能在哪里)

  • ie浏览器不兼容怎么办(网银ie浏览器不兼容)

    ie浏览器不兼容怎么办(网银ie浏览器不兼容)

  • 手机如何在图片上添加文字(手机如何在图片上签名字)

    手机如何在图片上添加文字(手机如何在图片上签名字)

  • 抖音账号注销后还能注册吗(抖音账号注销后作品怎么保存)

    抖音账号注销后还能注册吗(抖音账号注销后作品怎么保存)

  • 美团外卖豆在哪儿查看(美团豆在哪里)

    美团外卖豆在哪儿查看(美团豆在哪里)

  • 华为手机看视频如何满屏播放(华为手机看视频手机发烫是什么原因)

    华为手机看视频如何满屏播放(华为手机看视频手机发烫是什么原因)

  • oppo手机隐藏桌面图标的密码怎么修改(oppo手机隐藏桌面图标怎么找出来)

    oppo手机隐藏桌面图标的密码怎么修改(oppo手机隐藏桌面图标怎么找出来)

  • 苹果xr怎么设置悬浮球(苹果xr怎么设置铃声)

    苹果xr怎么设置悬浮球(苹果xr怎么设置铃声)

  • ac指什么(ACTH是什么)

    ac指什么(ACTH是什么)

  • Vite4 + Vue3 项目打包并发布Nginx服务器 (前端必看)(vue3.0 vite)

    Vite4 + Vue3 项目打包并发布Nginx服务器 (前端必看)(vue3.0 vite)

  • 可供出售金融资产会计处理
  • 展会补贴收入会计处理
  • 其他项目工会筹备金怎么报税
  • 税务报表的利润表
  • 一般纳税人的进项税额计入成本吗
  • 车船税在备注栏怎么报表
  • 企业缴纳残疾人保证金按什么标准缴纳
  • 外地企业如何在本地纳税
  • 外购动产与不动产时增值税的区别
  • 利息收入为什么是负数
  • 预提退货实际发生时账务处理
  • 房地产开发企业预缴增值税
  • 不用发票可以报销吗
  • 分公司亏损还会分摊所得税吗
  • 企业并购重组有哪些
  • 什么时候计入其他综合收益什么时候计入投资收益
  • 普通发票每个月有限制吗
  • 报税提示您可能缺少相关组件怎么处理
  • 固定资产的领用
  • 债权转让账务如何处理
  • 建筑工地伙食费会计分录
  • 冲销应收账款怎么记账
  • 本月损益类怎么结转
  • Win10 21H2 Build 21354 ISO 太阳谷官方镜像预览版下载
  • 结转损益和结转成本
  • 如何修复错误 OC3 INVT CHF100a
  • 公司入股的钱叫什么
  • w11怎么创建快捷方式
  • 本期进项税额转出会计分录
  • win7系统配置服务哪些启用
  • win10的环境配置在哪
  • 脐橙产业可行性报告
  • 红字发票如何开具
  • 资产处置收益科目借贷方向
  • 工会筹备金计税依据
  • 会计月报表怎么做表格
  • framework core
  • javaweb购物
  • 【历史上的今天】3 月 29 日:“机器人三定律”问世;电脑动画首次获得奥斯卡;Caldera Linux 沉浮史
  • pytorch csdn
  • php 方括号
  • 无形资产和固定资产减值准备可以转回吗
  • 小企业会计准则会计科目表
  • 配件盘点的方法
  • 企业筹建期间
  • dedecms主页修改
  • 律师跨省办案收取的费用叫什么
  • 关于sqlserver2000中的sql账号,角色
  • 变卖固定资产的账务处理
  • 旅游发票可以做差旅费吗
  • 挂靠建筑公司企业所得税怎么交?
  • 库存现金管理是财务分析的吗
  • 往来账怎么记账
  • 形成应收账款的会计分录
  • 公司章程约定的出资时间
  • 研发费用核查要点
  • mysql字段什么意思
  • mysql分页时offset过大的Sql优化经验分享
  • sqlserver isnull在数据库查询中的应用
  • mysql中计算两个日期之间的天数
  • sql中的非逻辑
  • MySQL(win7x64 5.7.16版本)下载、安装、配置与使用的详细图文教程
  • windows server2008 64位没有安装音频怎么办?
  • 硬盘读盘慢修复
  • windowsp.exe - windowsp是什么进程
  • centos8 systemd
  • linux ll不能用
  • window10提示更新总是
  • win7删除开机启动程序
  • cocos creator js ts
  • excel自定义样式
  • nodejs 回调
  • unity dem
  • Android: AudioFlinger中AudioPolicy的简单介绍
  • shell数据处理
  • node.js详解
  • angular.js
  • 在javascript中用下面哪个关键词来定义变量
  • 安卓 触摸屏
  • 公司注册后多久要去税务局登记
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设