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

  • qq音乐跟听对方会知道吗(qq音乐跟听对方状态无法跟听)

    qq音乐跟听对方会知道吗(qq音乐跟听对方状态无法跟听)

  • 微信解绑手机号还能用吗(微信解绑手机号最新方法)

    微信解绑手机号还能用吗(微信解绑手机号最新方法)

  • 如何将word中的所有英文字母设置成蓝色(如何将word中的回车符号去掉)

    如何将word中的所有英文字母设置成蓝色(如何将word中的回车符号去掉)

  • 华为mate30超广角怎么开(华为mate30超广角多少度)

    华为mate30超广角怎么开(华为mate30超广角多少度)

  • 华为手机手电筒快捷键是什么(华为手机手电筒怎么添加到桌面)

    华为手机手电筒快捷键是什么(华为手机手电筒怎么添加到桌面)

  • 闲鱼不显示芝麻分图标(闲鱼不显示芝麻信用标签)

    闲鱼不显示芝麻分图标(闲鱼不显示芝麻信用标签)

  • 商户收款二维码被冻结(商户收款二维码如何查询)

    商户收款二维码被冻结(商户收款二维码如何查询)

  • 小米个别app打不开(小米手机个别app打不开)

    小米个别app打不开(小米手机个别app打不开)

  • 为什么苹果手机下载不了软件一直要验证(为什么苹果手机充到80%就充不进去了)

    为什么苹果手机下载不了软件一直要验证(为什么苹果手机充到80%就充不进去了)

  • ssd硬盘为什么要开ahci模式(ssd硬盘为什么要开卡)

    ssd硬盘为什么要开ahci模式(ssd硬盘为什么要开卡)

  • win7桌面软件都打不开(win7桌面软件都打不开怎么办)

    win7桌面软件都打不开(win7桌面软件都打不开怎么办)

  • 美版5s可以用移动4g吗(美版的苹果5s支持什么卡)

    美版5s可以用移动4g吗(美版的苹果5s支持什么卡)

  • 因特网接入方式及特点(因特网接入方式五种)

    因特网接入方式及特点(因特网接入方式五种)

  • 如何将b站视频下至本地(如何将b站视频弄到PPT里)

    如何将b站视频下至本地(如何将b站视频弄到PPT里)

  • 云闪付怎样解绑银行卡(云闪付怎样解绑信用卡绑定)

    云闪付怎样解绑银行卡(云闪付怎样解绑信用卡绑定)

  • 腾讯视频怎么没有倍速播放(腾讯视频怎么没有声音)

    腾讯视频怎么没有倍速播放(腾讯视频怎么没有声音)

  • 数字证书包括哪些内容(数字证书有三种类型)

    数字证书包括哪些内容(数字证书有三种类型)

  • 苹果x跟苹果11有什么区别(苹果11和苹果x)

    苹果x跟苹果11有什么区别(苹果11和苹果x)

  • oppo手机显示volte什么意思(OPPO手机显示可用时间是什么回事)

    oppo手机显示volte什么意思(OPPO手机显示可用时间是什么回事)

  • excel如何加密(excel如何加密码)

    excel如何加密(excel如何加密码)

  • 免费wifi钥匙在哪看密码呢(免费的wlan钥匙)

    免费wifi钥匙在哪看密码呢(免费的wlan钥匙)

  • 如何正确安装和卸载软件(如何正确安装和使用电脑)

    如何正确安装和卸载软件(如何正确安装和使用电脑)

  • js基本数据类型有什么特点(js基本数据类型和复杂数据类型的区别)

    js基本数据类型有什么特点(js基本数据类型和复杂数据类型的区别)

  • 什么是税目税基税率,简答题
  • 小微企业免税销售额是按1%还是3%
  • 其他应付款二级明细
  • 会计中计提是什么意思
  • 可供出售金融资产是指什么
  • 个人转让商铺个人所得税核定征收
  • 企业注销递延所得税资产怎么处理
  • 增值税专用发票验证真伪
  • 维修费用的税率
  • 纳税信用b
  • 非盈利组织纳税筹划
  • 公司没有车牌可以买车吗
  • 13个点的税怎么算税金
  • 纳税申报比对
  • 财务软件里凭证打印如何设置不打印三级科目
  • 欠发工资如何赔偿
  • 工商年检填写数据填错了会罚款吗
  • 反避税的意义
  • 固定资产减值判断标准
  • 小规模商贸企业增值税税率
  • php curl命令详解
  • 发生的广告费用属于什么会计要素
  • 会计账簿的错账怎么办
  • 房屋租赁如何开税票
  • php 堆排序
  • 十大网页游戏
  • 盈余公积金可以用来扩大公司生产经营
  • 废旧物资回收企业所得税优惠政策
  • 残疾人保障金是什么科目
  • 计提补贴会计分录
  • php数字增1
  • php调用微信扫描二维码
  • 调出command命令窗口
  • 通过点击office文件按钮可以选择设置系统选项
  • 客运收费标准
  • 出租的厂房折旧记哪里
  • 施工图审查费属于什么费用类别
  • 织梦图片要放哪里
  • 主营业务税金及附加包括增值税吗
  • 10万销售额是含税还是不含税
  • 三栏式明细账适用于原材料明细账
  • 什么情况下增值税进项税额转出
  • 只有收入没有成本怎么做账
  • 分销佣金账务处理流程
  • 商品盘点短缺
  • 原材料用于在建工程
  • 收到错误发票已入账跨月重新开会计分录
  • 公司收到股东的投资款以后怎么处理
  • 资产减值损失属于损益类的收入还是费用
  • 利润表中公允价值变动为贷
  • 新建公司需要什么
  • 简述工作底稿的一般要求及内容
  • win7历史记录在哪里
  • windows 8
  • macos safari无法使用
  • 远程删除
  • macbookpro怎么测声音
  • linux用户管理包括哪几个文件
  • win10系统无法更改
  • smon进程
  • win1020h2正式版
  • linux如何加载动态库
  • win7系统ie浏览器打不开
  • 2021年win10累积更新
  • linux %1
  • windows8窗口
  • js动态表格可修改表格数据
  • cocos2dx入门
  • node做爬虫
  • js的文件操作
  • dos命令怎么输入命令
  • unity 3d教程
  • vs开发web教程
  • nodejs读取文件夹下的所有文件
  • 安装了python2.7和3.6怎么切换版本
  • Python字符串切片例子
  • The method findViewById(int) is undefined for the type FragmentHome报错
  • python ftp storbinary
  • 公司租商铺
  • 城市维护建设税税基是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设