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

  • 未核销fyc
  • 运输途中合理的消耗损耗
  • 出口销售收入要交增值税吗
  • 劳务费可以开工程服务发票吗
  • 一般纳税人当月生效次月生效有什么区别
  • 天猫国际的店铺是正品吗 感觉很便宜
  • 应收利息对应什么科目
  • 资产负债表上的资产是原值还是净值
  • 冲减上年的所得税费用入什么科目?
  • 写字楼出租可以给租户注册吗
  • 承包外单位食堂会计怎么做账
  • 存出保证金的账务处理
  • 企业员工已公司名义参加境外比赛获得奖金如何缴税?
  • 申报密码遗失怎么重置
  • 电话宽带是什么意思
  • 会计员如何处理21种差额计税?
  • 财务报表依据的会计记录
  • 房企结转收入
  • 定金转为货款如何表述
  • 营业执照办理流程需要多久
  • 无形资产研发支出适用于税前加计扣除的政策
  • 企业以盈余公积转增资本,会引起所有者权益总额的变动
  • 成本票要交税吗
  • 个贷系统平帐专户A贷
  • 非房地产企业的基建管理办法
  • 您的磁盘
  • 认缴制没有实资本会怎么样
  • 固定资产折旧计算方法
  • 增值税应税行为是什么意思
  • 对于以长期投资为目的
  • 进程process.acore已停止怎么办
  • 可抵扣的费用
  • 建筑业统一发票真伪查询
  • 财务比率分析的主要内容
  • 支付水电费增值税账务处理
  • laravel sqlserver
  • 蒙大拿州美景
  • php代码生成
  • h5支付功能
  • 前端大佬都有谁
  • seaborn库的特点
  • node深入浅出pdf
  • php数组降序排列
  • smarty模板引擎
  • 应收贷方有余额怎么调整
  • db2diag命令
  • java arraytolist
  • 不同情况不同处理的句子
  • 进项税忘了加计怎么处理
  • 如何查询去年企业所得税
  • 购销合同交印花税吗怎么交
  • 钢贸企业税收怎么算
  • 给员工发放礼品的祝福
  • 应税销售额税率
  • 固定资产折旧准备属于什么科目
  • 可供出售交易性金融资产申报表怎么填
  • sqlserver、mysql获取连接字符串步骤
  • 进项税额转出的会计分录怎么做
  • 公司雇佣退休人员工资怎么发
  • 个体户为员工缴纳社保
  • 广告费计入什么会计分录
  • 自产产品发给职工做福利的会计处理
  • 贴现公司贴现合法吗
  • 没有收入是纳税人吗
  • 单位社保缴费基数比例
  • 差旅费住宿专票能否抵扣
  • 企业控股情况怎么看
  • 银行卡里的钱怎么转出来
  • ddl dml的区别
  • win8资源管理器在哪
  • win7系统共享打印机设置方法
  • 重装win7旗舰版重启后黑屏
  • 在linux操作系统中,/etc/rc.d/init.d
  • linux文件中添加内容
  • linux共享内存最大值
  • node.js mac
  • 本期预缴税额怎么填
  • 增+6=多少
  • ipo上市要注意什么
  • 轮胎消费税的征收环节
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设