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

  • 苹果如何关静音模式(苹果如何关静音不震动)

    苹果如何关静音模式(苹果如何关静音不震动)

  • airpods2真假区别(airpods2真假区别知乎)

    airpods2真假区别(airpods2真假区别知乎)

  • vivo手机ai键是干什么的(vivox27手机ai键)

    vivo手机ai键是干什么的(vivox27手机ai键)

  • 注册微信好友辅助二维码过期怎么办(注册微信好友辅助验证)

    注册微信好友辅助二维码过期怎么办(注册微信好友辅助验证)

  • m2e是什么手机(m2e是什么手机型号)

    m2e是什么手机(m2e是什么手机型号)

  • 小米手机在哪下载东西(小米手机在哪下载软件安装)

    小米手机在哪下载东西(小米手机在哪下载软件安装)

  • 淘宝封永久还能解封吗(淘宝被永久封还能开吗)

    淘宝封永久还能解封吗(淘宝被永久封还能开吗)

  • word文档里怎么删除空白页(word文档里怎么添加方框)

    word文档里怎么删除空白页(word文档里怎么添加方框)

  • 检测到ip地址冲突是什么原因(检测到ip地址冲突怎么解决)

    检测到ip地址冲突是什么原因(检测到ip地址冲突怎么解决)

  • 抖音的合拍怎么弄(抖音的合拍怎么没有声音)

    抖音的合拍怎么弄(抖音的合拍怎么没有声音)

  • 苹果6建议更新ios13吗(苹果6建议更新系统吗)

    苹果6建议更新ios13吗(苹果6建议更新系统吗)

  • 对方位置不可用的原因(对方的位置为什么一直显示不可用)

    对方位置不可用的原因(对方的位置为什么一直显示不可用)

  • airpods pro尺寸(airpods pro尺寸大小)

    airpods pro尺寸(airpods pro尺寸大小)

  • 手机qq如何查看共同好友(手机qq如何查看已删除好友的聊天记录)

    手机qq如何查看共同好友(手机qq如何查看已删除好友的聊天记录)

  • 删抖音视频有什么影响(抖音删除视频好吗)

    删抖音视频有什么影响(抖音删除视频好吗)

  • 如何用手机称体重(如何用手机称体重华为)

    如何用手机称体重(如何用手机称体重华为)

  • 安卓手机如何去除锁屏广告(安卓手机如何去水印)

    安卓手机如何去除锁屏广告(安卓手机如何去水印)

  • 小爱音箱无法连接无线网络(小爱音箱无法连接网络是怎么回事)

    小爱音箱无法连接无线网络(小爱音箱无法连接网络是怎么回事)

  • 快手怎么取关所有人(快手怎么取关所有粉丝)

    快手怎么取关所有人(快手怎么取关所有粉丝)

  • Excel表格一张纸上打印不全怎么办(表格怎样打印在一张a4纸上)

    Excel表格一张纸上打印不全怎么办(表格怎样打印在一张a4纸上)

  • 最早的滑盖手机(最早的滑盖手机,摄像头可以自动旋转)

    最早的滑盖手机(最早的滑盖手机,摄像头可以自动旋转)

  • 拉韦尔泰佐附近一条河里的石头,瑞士塞斯卡山谷 (© Robert Seitz/Offset by Shutterstock)(拉尔韦橡)

    拉韦尔泰佐附近一条河里的石头,瑞士塞斯卡山谷 (© Robert Seitz/Offset by Shutterstock)(拉尔韦橡)

  • Web渗透测试---Web TOP 10 漏洞(Web渗透测试新手实操详解)

    Web渗透测试---Web TOP 10 漏洞(Web渗透测试新手实操详解)

  • 转让土地使用权营业税税率
  • 支付投资人的投资收益账务处理
  • 会计报废怎么处理
  • 土地置换账务处理流程
  • 摊余成本加还是减
  • 红字通知单撤销后系统还能查到吗
  • 公司做账是做什么
  • 分支机构第要交企业所得税吗?
  • 企业拆迁补偿款会计分录
  • 油品沥青消费税征收范围
  • 2016年红冲发票流程
  • 货运发票与运输发票的区别
  • 物业公司代收暖气费如何开票
  • etc充值发票可以抵扣税吗
  • 1697510217
  • 服务器研发属于什么行业
  • 华为手机怎么删除多余的桌面
  • 系统日志在哪里打开
  • 华为mate手机sim卡怎么插
  • 在php中,字符串有哪些表示形式
  • php文件上传用什么请求方法
  • 公司社保钱可以套出来吗
  • 布里斯托尔景点
  • 公司已开票给客户,但客户未打款怎么办?
  • 鼠标按键多有用吗
  • 微信php开发教程
  • echarts地图tooltip
  • 企业成立多久可以注销
  • php面向对象是什么意思
  • 培训公司要交哪些税
  • php抽象类和普通类的区别
  • 三维重建的主要步骤
  • 编程 开发
  • json有几种基本结构
  • 激活接口的命令
  • 银行同业存放业务管理办法
  • 分配现金股利的分录
  • vue3父子组件通信
  • 公司注销员工的经济补偿哪些情况才能是2N呢
  • 利息收入为什么冲减财务费用
  • 销售车位应怎么交税
  • 购车增值税可以不交吗
  • win2008安装sql2008教程
  • sql翻译
  • 经审计的财务报表是否要会计师事务所盖章
  • 我们可以收到很多礼物
  • 公司被仲裁后怎么补救
  • 奖金偶然所得税起征点
  • 联营单位投入的款项
  • 代金券抵帐怎么退款
  • 特殊销售方式下销售额的确定
  • 员工工资计入成本怎么做账
  • 包装物属于周转材料还是低值易耗品
  • 其他债权投资有没有减值准备
  • 上期留抵税额可以留多久
  • 税收返还如何做账
  • 新冠肺炎疫情相关租金减让适用简化处理方法的时间范围
  • 出租车票没有发票怎么办
  • 明细账的登记方向与总账的登记方向是一致的
  • 数据库木马
  • sqlserver多表查询 索引
  • windows server能干嘛
  • win8/10whql
  • ubuntu的软件
  • linux解释
  • solaris 查看进程
  • win内存占用率过高
  • win7系统无法安装谷歌怎么办
  • win8怎么设置成win7菜单
  • unityshader怎么用
  • ubuntu运行qt程序
  • jquery虚拟dom
  • python多线程怎么写
  • node js require
  • js限制字符长度
  • 浏览器环境下的事件循环
  • 河南2020年机构改革
  • 广西个人医保缴费时间
  • 企业滞纳金怎么算 计算公式
  • 泉州国税局网站首页
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设