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

  • vivox70蓝牙在哪里(vivo 70s蓝牙设置在哪里)

    vivox70蓝牙在哪里(vivo 70s蓝牙设置在哪里)

  • pdf格式怎么转换成ppt(pdf格式怎么转换成jpg格式)

    pdf格式怎么转换成ppt(pdf格式怎么转换成jpg格式)

  • 荣耀x10和荣耀30的区别有哪些(荣耀x10和荣耀30青春版哪个好)

    荣耀x10和荣耀30的区别有哪些(荣耀x10和荣耀30青春版哪个好)

  • 如果咸鱼买家要强行退货怎么办(闲鱼买家一定要退货怎么办)

    如果咸鱼买家要强行退货怎么办(闲鱼买家一定要退货怎么办)

  • 触控采样率是什么(触控采样率是什么意思)

    触控采样率是什么(触控采样率是什么意思)

  • 初代watch可以匹配ios13吗(初代watch可以匹配ios14吗)

    初代watch可以匹配ios13吗(初代watch可以匹配ios14吗)

  • 手机相册图片怎么剪切不要的部分(手机相册图片怎么拼图)

    手机相册图片怎么剪切不要的部分(手机相册图片怎么拼图)

  • 字体加黑怎么弄(字体加黑怎么弄成白色)

    字体加黑怎么弄(字体加黑怎么弄成白色)

  • 台式电脑不用键盘怎么打字(台式电脑不用键鼠怎么电亮屏幕)

    台式电脑不用键盘怎么打字(台式电脑不用键鼠怎么电亮屏幕)

  • 荔枝vip是爱奇艺吗(购买了荔枝会员如何收取爱奇艺会员)

    荔枝vip是爱奇艺吗(购买了荔枝会员如何收取爱奇艺会员)

  • 拍夜景用多大光圈(拍夜景多大光圈合适)

    拍夜景用多大光圈(拍夜景多大光圈合适)

  • 抖音小店和橱窗的区别(抖音小店和橱窗带货哪个好做)

    抖音小店和橱窗的区别(抖音小店和橱窗带货哪个好做)

  • iphone11pro用的什么基带(iphone11pro用的什么处理器)

    iphone11pro用的什么基带(iphone11pro用的什么处理器)

  • 如何创建百度百科(如何创建百度百家号)

    如何创建百度百科(如何创建百度百家号)

  • 小米8se是双路wifi吗(小米8是双路wifi吗)

    小米8se是双路wifi吗(小米8是双路wifi吗)

  • xshell怎么连接服务器(xshell怎么连接服务器没网络)

    xshell怎么连接服务器(xshell怎么连接服务器没网络)

  • 平板百度怎么全屏(平板百度全屏怎么设置)

    平板百度怎么全屏(平板百度全屏怎么设置)

  • 乐视视频如何投屏(乐视视频如何投屏到电视上)

    乐视视频如何投屏(乐视视频如何投屏到电视上)

  • 手机关机微信视频显示什么(手机关机微信视频电话会怎么显示)

    手机关机微信视频显示什么(手机关机微信视频电话会怎么显示)

  • Linux连接windows的ftp unzip出现问题的解决方法(linux连接windows的服务redis)

    Linux连接windows的ftp unzip出现问题的解决方法(linux连接windows的服务redis)

  • mac os x快捷键中方说明(启动快捷键、Finder快捷键、鼠标键)(mac的快捷键在哪)

    mac os x快捷键中方说明(启动快捷键、Finder快捷键、鼠标键)(mac的快捷键在哪)

  • python线程安全的介绍及解决方法(python中线程可以用在哪些方面)

    python线程安全的介绍及解决方法(python中线程可以用在哪些方面)

  • 读懂增值税
  • 增值税一般纳税人证明文件
  • 增值税纳税期限1日是什么意思
  • 同一控制下企业合并和非同一控制下企业合并的区别
  • 个人平均缴费基数
  • 给分公司开发票由总公司付款怎么办?
  • 银行利息收入可以开增值税专用发票
  • 企业生产成本核算的一般程序为
  • 股权交易要不要缴纳印花税?
  • 新公司领取营业执照后的流程
  • 财务费用应计入什么账户
  • 开专票需要备注吗
  • 母公司吸收合并全资子公司
  • 货物出口被海关查
  • 应收账款周转率怎么分析
  • 代扣代缴增值税怎么申报
  • 产品打样费计入什么科目
  • 建筑业增值税会计核算是哪门课的内容
  • reminder.exe - reminder是什么进程 有什么用
  • 公司收到银行转账会计分录
  • php常用的优化方式
  • php4位数的随机字符
  • linux中qq怎么添加快捷键启动功能?
  • 预缴税款会计处理分录
  • 投资性房地产期末公允价值大于账面价值
  • 登记会计账簿的注意事项
  • 发票填开的基本规定?
  • driver-e
  • 收到银行本票的账务处理
  • 企业所得税税前扣除凭证管理办法
  • yii2 adminlte
  • 微信小程序分成比例
  • 印度泰姬陵建筑
  • 多目标pso
  • 利得是什么举个例子
  • 工程项目会计怎么样
  • 长期待摊费用的摊销方法
  • 无人驾驶基础知识
  • 原生ajax和axios的区别
  • 建设工程施工合
  • Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版
  • 小轿车折旧年限
  • 什么是会计确认的基础
  • 财务核算科目核算流程图
  • 蔬菜免征增值税优惠
  • 增值税税点怎么算3个点
  • python字典遍历key
  • mac安装mysql8.0
  • 公司基本户如何注销
  • 调拨仓库
  • 税收类型增值税有哪些
  • sqlserver启动不起来
  • 执行企业会计制度是什么意思
  • 允许抵扣的进项税
  • 契税退税政策怎么操作
  • 加油票子能报销吗
  • 母子公司之间无偿划转固定资产
  • 土地使用权出资是什么意思
  • 管家婆进货单科目名称怎么录入?
  • 公司的软件服务器设置什么意思啊
  • 小微企业免征增值税优惠
  • sql hash
  • /wlan direct
  • ubuntu鼠标不能移动
  • 密码多次错误被锁定怎么办
  • mac睡眠设置方法
  • 王牌竞速 小米
  • jusearch是什么程序
  • perl数组求和
  • Basic Layout——基本布局
  • unity做安卓app
  • 简述ajax
  • 批处理中for语句的哪个参数表示目录
  • javascript刷新页面的几种方法
  • nodejs集成sqlite使用示例
  • 如何动态加载外部文件
  • 一般纳税人申请资格条件
  • 辽宁社保网上申报流程图
  • 商铺缴纳契税需要复印件吗
  • 印花税核定依据填写什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设