范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

开源了一个webpack插件,希望对大家有所帮助

  最近,陆陆续续搞 了一个 UniUsingComponentsWebpackPlugin 插件(下面介绍),这是自己第三个开源项目,希望大家一起来维护,一起 star 呀,其它两个:  vue-okr-tree基于 Vue 2的组织架构树组件地址:https://github.com/qq449245884/vue-okr-tree  ztjy-cli团队的一个简易模板初始化脚手架地址:https://github.com/qq449245884/ztjy-cli  UniUsingComponentsWebpackPlugin地址:https://github.com/qq449245884/UniUsingComponentsWebpackPlugin配合UniApp,用于集成小程序原生组件  配置第三方库后可以自动引入其下的原生组件,而无需手动配置  生产构建时可以自动剔除没有使用到的原生组件  背景第一个痛点
  用 uniapp开发小程序的小伙伴应该知道,我们在 uniapp 中要使用第三方 UI 库( vant-weapp ,iView-weapp )的时候 ,想要在全局中使用,需要在 src/pages.json  中的 usingComponents  添加对应的组件声明,如: // src/pages.json "usingComponents": {     "van-button": "/wxcomponents/@vant/weapp/button/index",   }
  但在开发过程中,我们不太清楚需要哪些组件,所以我们可能会全部声明一遍(PS:这在做公共库的时候更常见),所以我们得一个个的写,做为程序员,我们绝不允许使用这种笨方法。 这是第一个痛点 。  第二个痛点
  使用第三方组件,除了在  src/pages.json  还需要在对应的生产目录下建立 wxcomponents ,并将第三方的库拷贝至该文件下,这个是 uniapp 自定义的,详细就见:https://uniapp.dcloud.io/frame?id=%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84。
  这是第二个痛点 。  第三个痛点
  第二痛点,我们将整个UI库拷贝至  wxcomponents ,但最终发布的时候,我们不太可能全都用到了里面的全局组件,所以就将不必要的组件也发布上去,增加代码的体积。
  有的小伙伴就会想到,那你将第三方的库拷贝至  wxcomponents 时候,可以只拷使用到的就行啦。是这理没错,但组件里面可能还会使用到其它组件,我们还得一个个去看,然后一个个引入,这又回到了第一个痛点了。
  有了这三个痛点,必须得有个插件来做这些傻事,处理这三个痛点。于是就有  UniUsingComponentsWebpackPlugin  插件,这个webpack 插件主要解决下面几个问题:  配置第三方库后可以自动引入其下的原生组件,而无需手动配置  生产构建时可以自动剔除没有使用到的原生组件  webpack 插件
  webpack 的插件体系是一种基于 Tapable 实现的强耦合架构,它在特定时机触发钩子时会附带上足够的上下文信息,插件定义的钩子回调中,能也只能与这些上下文背后的数据结构、接口交互产生 side effect,进而影响到编译状态和后续流程。
  从形态上看,插件通常是一个带有  apply 函数的类: class SomePlugin {     apply(compiler) {     } }
  Webpack 会在启动后按照注册的顺序逐次调用插件对象的  apply  函数,同时传入编译器对象 compiler  ,插件开发者可以以此为起点触达到 webpack 内部定义的任意钩子,例如: class SomePlugin {     apply(compiler) {         compiler.hooks.thisCompilation.tap("SomePlugin", (compilation) => {         })     } }
  注意观察核心语句  compiler.hooks.thisCompilation.tap ,其中 thisCompilation  为 tapable 仓库提供的钩子对象;tap  为订阅函数,用于注册回调。
  Webpack 的插件体系基于 tapable  提供的各类钩子展开,所以有必要先熟悉一下 tapable 提供的钩子类型及各自的特点。
  到这里,就不做继续介绍了,关于插件的更多 详情可以去官网了解。
  这里推荐  Tecvan  大佬写的 《Webpack 插件架构深度讲解》  实现思路
  UniUsingComponentsWebpackPlugin 插件主要用到了三个  compiler  钩子。
  第一个钩子是  environment : compiler.hooks.environment.tap(       "UniUsingComponentsWebpackPlugin",       async () => {         // todo someing       }     );
  这个钩子主要用来自动引入其下的原生组件,这样就无需手动配置。 解决第一个痛点 。
  第二个钩子  thisCompilation ,这个钩子可以获得 compilation ,能对最终打包的产物进行操作: compiler.hooks.thisCompilation.tap(       "UniUsingComponentsWebpackPlugin",       (compilation) => {         // 添加资源 hooks         compilation.hooks.additionalAssets.tapAsync(           "UniUsingComponentsWebpackPlugin",           async (cb) => {             await this.copyUsingComponents(compiler, compilation);             cb();           }         );       }     );
  所以这个勾子用来将  node_modules  下的第三库拷贝到我们生产 dist 目录里面的 wxcomponents  ,解决第二个痛点。
  ps:这里也可直接用现有的  copy-webpack-plugin  插件来实现。
  第三个钩子  done ,表示 compilation  执行完成:     if (process.env.NODE_ENV === "production") {       compiler.hooks.done.tapAsync(         "UniUsingComponentsWebpackPlugin",         (stats, callback) => {           this.deleteNoUseComponents();           callback();         }       );     }
  执行完成后,表示我们已经生成  dist  目录了,可以读取文件内容,分析,获取哪些组件被使用了,然后删除没有使用到组件对应的文件。这样就可以解决我们第三个痛点了。
  PS:这里我判断只有在生产环境下才会 剔除,开发环境没有,也没太必要。  使用
  安装  npm install uni-using-components-webpack-plugin --save-dev
  然后将插件添加到 WebPack Config 中。例如:  const UniUsingComponentsWebpackPlugin = require("uni-using-components-webpack-plugin");  module.exports = {   plugins: [  new UniUsingComponentsWebpackPlugin({      patterns: [      {       prefix: "van",       module: "@vant/weapp",      },      {       prefix: "i",       module: "iview-weapp",      },      ],     })   ], };
  注意:uni-using-components-webpack-plugin 只适用在 UniApp 开发的小程序。   参数
  NameType  Description  patterns{Array}为插件指定相关 Patterns
  moduleprefix 模块名组件前缀
  module  是指  package.json  里面的 name ,如使用是 Vant 对应的 module  为@vant/weapp ,如果使用是 iview,刚对应的 module  为 iview-weapp ,具体可看它们各自的 package.json 。
  prefix  是指组件的前缀,如 Vant 使用是  van  开头的前缀,iview 使用是 i  开头的前缀,具体可看它们各自的官方文档。
  PS:  这里得吐曹一下 vant,叫别人使用 van 的前缀,然后自己组件里面声明子组件时,却没有使用 van 前缀,如  picker  组件,它里面的 JSON 文件是这么写的:  {   "component": true,   "usingComponents": {     "picker-column": "../picker-column/index",     "loading": "../loading/index"   } }
  picker-column  和 loading  都没有带 van  前缀,因为这个问题,在做 自动剔除 功能中,我是根据 前缀来判断使用哪些组件的,由于这里的 loading  ,picker-column  没有加前缀,所以就被会删除,导致最终的 picker  用不了。为了解决这个问题,增加了不少工作量。
  希望 Vant 官方后面的版本能优化一下。  总结
  本文通用自定义 Webpack 插件来实现日常一些技术优化需求。主要为大家介绍了 Webpack 插件的基本组成和简单架构,通过三个痛点,引出了  uni-using-components-webpack-plugin  插件,并介绍了使用方式,实现思路。
  最后,关于 Webpack 插件开发,还有更多知识可以学习,建议多看看官方文档《Writing a Plugin》进行学习。

2月中国手机销量负增长,年轻人为什么不愿换手机了本内容来源于什么值得买APP,观点仅代表作者本人作者掌中游侠据最新通信院公布的数据统计,今年2月份国内手机出货量为1486。4万部,同比下跌31。7。其中,5G手机1137。4万部运动相机和全景相机哪个好?比单反微单手机拍摄有哪些优势?不知道从什么时候开始,很多人开始放弃单反和微单,玩起了运动相机和全景相机,那么,运动相机和全景相机比起单反微单以及手机拍摄,到底有哪些优势呢?首先来看运动相机,运动相机从价格来看虽中国又一个黑科技问世,短短一周,估值就已经达到了300多亿小米有品推穷人剃须刀,众筹7天卖出1125万,价格很实在对于雷军这个人,你了解多少呢?相信对于雷军,很多人都是因为小米手机认识的他,因为他在发布会上说过一句小米,为发烧而生而记住了vivoXNote正式发布首款7英寸大屏旗舰,5999元起售出品搜狐科技编辑林国振4月11日,vivo除了带来首款折叠屏旗舰vivoXFold之外,还带来了一款直板旗舰vivoXNote,这是一款大屏商务旗舰。作为一款大屏旗舰,vivoXN2K屏三星GN2大电池,小米拍照旗舰跌至3999元,销量反超小米12最近小米一款老旗舰机火了,没错就是小米11Ultra,这是小米去年最顶级的旗舰机,当时发布价高达5999元,即便已经过去一年多的,这款手机各方面也是相当能打,尤其是在相机上,还是目高通骁龙870不再神?即将被时代抛弃,真的不能买了吗?最近两年手机处理器发展到了瓶颈,比如高通骁龙888骁龙8Gen1两款处理器的性能提升都没有达到预期,发热量相对来说也比较大,对于不怎么玩游戏的朋友们来说不是特别喜欢。在这种情况下,让更聪明的机器人赋能更多应用场景原标题作为专精特新中小科技企业,将更多资金投入到研发中,虽然困难很多但收获更多(引题)让更聪明的机器人赋能更多应用场景(主题)工人日报中工网记者车辉孙震阅读提示随着我国人口老龄化程数字货币有哪些,最新的排行榜你需要知道虚拟货币交易的浪潮席卷全球,那么现在虚拟货币有哪些?相信大家已经从各种新闻里朋友圈里看到过很多关于虚拟货币的消息了,而其中最具有代表性的当数比特币。哪怕没有参与虚拟货币的人都听说过培育实体经济和数字技术融合新优势推动数字技术和实体经济的深入融合,是我国畅通经济循环激活发展动能增强经济韧性的重要着力点。应充分发挥国内超大规模市场和完备产业体系优势,持续促进二者融合的深度和广度。国务院印发的十美媒竟如此敲打印度想亲俄?看看中国华为的下场先(观察者网讯)对俄罗斯过于亲密会被反噬。了解华盛顿的权力吗?中国那些命运多舛的科技巨头就是教训11日,美国彭博社刊载一篇评论文章,就印度亲俄表达不满与警告。并且,文章竟还拿中国华为首款AR隐形眼镜要来了!动动眼球就能通话导航搜索作者yy来源极果编辑部前几天的愚人节大整蛊环节里,不少科技公司出秀了些脑洞大开的操作,要说本游戏爱好者印象最深的,莫过于华硕公布了全球首款游戏隐形眼镜ROG智能眼镜!数码科技趣闻据
继续爆火,1月份新能源汽车销量同比增长141。4中国经济周刊经济网讯(记者吕江涛)北京时间2月15日,高瓴旗下HHLRAdvisors公布了2021年末美股持仓数据。去年第四季度,HHLR在美股市场增持392万股理想汽车至500困境之下华为依然选择拿出550亿任正非已经看到决定胜负的关键任正非作为国内科技企业的代表,2021年对于华为而言无疑是十分艰难的一年芯片业务受阻消费电子业务下滑营收下降28。9,但是面对如此困境华为依然没有选择放弃,任正非更是决定以每股1。加快数字经济立法,数字货币要再起一波,谁当旗手今天是2月15日,周二,元宵节快乐!在盘后,加快数字经济立法的说法已经传遍,数字货币看来要再起一波了,在经历过之前的大幅调整之后,哪些股会成为下一阶段的旗手呢?恒宝,上一阶段的的人工程院我国电子信息领域面临十三大挑战来源人民网人民网北京2月15日电(记者赵竹青)记者从中国工程院获悉,2月15日,中国工程院信息与电子工程学部中国信息与电子工程科技发展战略研究中心在京发布中国电子信息工程科技发展十华为厉害,12512G卖8488也断货!鸿蒙OS200倍变焦太强在高价位手机产品上,我们一般是很难看到卖断货的机型,因为一般用户难以承担高价位手机,这说明高价位手机的销量很有限。不过凡事都有例外,比如iPhone就是最好的典型,虽然卖价昂贵,但华为公司推出新规,多款鸿蒙手机皆可升级,友商小算盘无奈落空进入2021年以来,华为手机业务是受到非常大的影响的。面对漂亮国的多轮制裁,华为旗下的新机数量可谓是少之又少。对于忠实的花粉来说,想买一台好的华为5G手机都是非常困难的。面对这种情学生党20002500元价位段手机推荐2000到2500元机长目前选择很多,并且部分品牌机型性能要比3000价位段手机还要强,如果要买这个价位段的手机,机长建议考虑以下几款。第一款IQOONeo5骁龙870处理器后置O导航软件如何规划ampampquot最短路线ampampquot?程序员视角科普生活知识hello大家好我是浩说关于最短路线这个问题我们生活中有一个典型应用使用导航软件帮我们规划从出发地到目的地的最短路线今天我们就来研究一下导航软件如何计算最短路个人眼中互联网技术路线年龄段和资产分布如果28岁前没到p733岁前没到p8基本上是算低潜,将会面临35岁中年危机。12428岁技术专家。资产配置一二线城市首套房价值500万左右,贷款无压力或基本还清,租车位。配置205QQ秀真实世界的倒影,社区的第一次出现腾讯控股是我的第一重仓股,读吴晓波著的腾讯传能帮助大家更好的理解腾讯的商业模式。本文是腾讯传的第5篇。2002年推出的QQ新版本中,第一次出现了群聊功能。这个功能的灵感来自于腾讯内从第一到下架,葛兰基金退出支付宝热销榜,天天基金腾讯理财通仍排前十,网友这是人工干预了智能?财联社(深圳,记者周晓雅)讯,葛兰产品被支付宝从周销量榜单下线,当下谁是榜单主角?记者观察来看,目前该榜单上有10只基金,包括4只债基5只混合偏股基金,以及1只股票型基金。其中,权