Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。Gulp.js 是基于 Node.js 构建的,利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。
今天我们将展示如何编写一个Gulp插件,本文中的插件实现了把源码中的中文字符转义为unicode格式。
插件编写准则
在正式编写一个gulp插件之前,推荐遵守如下的指导原则,它们不是强制性的,但是强烈推荐你遵守。
你的插件不应该做一些用现有node模块就能轻松完成的事情你的插件应该只做一件事,并且把它做好。你的插件不应该做其他插件负责的事情你的插件必须经过测试在插件的package.json的keyword字段值中添加gulpplugin,便于搜索找到它你的插件API应该是一个返回stream的函数不要在stream中抛出错误在任何错误前加上插件的名称作为前缀gulp插件的名字应该以”gulp-”作为开头file.contents的类型在插件中传出时和传入时保持一致在完成之前,不要向下游传递file对象拷贝文件或基于文件创建新文件时,使用file.clone()。使用推荐的模块,让插件编写更加容易不要把gulp作为插件的dependency或者peerDependency依赖一个插件是什么样的?
gulp-encode-chinese 插件编写
我们这个插件的设计目标是将JavaScript源码文件中的中文编码为unicode,例如“中文”会被处理为“\u4e2d\u6587”。
首先,我们需要编写一个函数来执行具体的文字替换过程。这里使用了正则表达式的一个新特性“Unicode属性转义”,它会基于unicode字符属性区分字符。对于我们这个例子来说,匹配一个中文汉字的正则表达式是 /\p{Script=Han}/u。\p表示当前使用Unicode属性转义,Script=Han匹配那些script属性是Han(汉字)的字符。
上面的toUnicode函数以一个字符串为参数,会返回一个unicode格式的字符串。
接下来,我们需要把这个函数内嵌到gulp插件模板里。
在上面的插件中,我们采用了 through2这个库以简化插件代码。
一个gulp插件总是会返回stream,它处理的文件是一个 vinyl文件对象。一个Vinyl对象含有2个属性:path和contents。它的contents属性有3种类型:Stream,Buffer和Empty(null)。
在我们的插件中,对于每一种类型都做了对应的处理,所以它是一个功能完备的gulp插件!
总结
本文重点介绍了如何编写一个全功能的gulp插件,它处理了3种Vinyl文件类型并对应做了处理。
在编写一个插件之前,建议先搜索已有的插件库,避免重复发明轮子。对于我们的这个例子而言,其实也可以通过 gulp-replace 这个插件实现所需的功能。不过当你找不到所需的插件想要编写自己的时,希望能帮助到你。
关键词: unicode转中文
Ginkgo宣布与沙特投资部合作,共同创建可持续的全球生物安全基础设施 “Ginkgo正在创建可持续的全球生物安全基础设施,以帮助预防、检测和应对各种生物威胁。”
全球焦点!七匹狼2022年Q3营收下降3%:消费者对服饰需求转变,公司积极布局直播电... “消费者更加追求健康、自由的生活方式助推了体育、户外产品的发展。”
双汇发展:公司会密切关注行情,做好行情研判,谨慎做好经营决策 双汇发展(000895)10月27日在投资者关系平台上答复了投资者关心的问题。
世界快消息!一日两场会!贵州茅台回应近期股价波动:有信心、有能力确保未来持续... 近期连续下跌,股价已跌破1400元关口的“白酒一哥”贵州茅台,在10月28日召开的2022年第三十六次党委(扩大)会议上,针对资本市场端的变...
全球热点!创新合作共破困局 证券时报药物创新联盟沙龙在上海举行 10月28日,以“创新合作·共破困局”为主题的第三期证券时报药物创新联盟沙龙在上海成功举行。证券时报社副社长高宁出席活动并致辞,恒...
全球快看点丨三湘印象:目前公司未参与相关项目 三湘印象(000863)10月29日在投资者关系平台上答复了投资者关心的问题。
环球新消息丨南京聚隆:2022年三季度净利润增长50.34%业绩大幅提升 未来可期 10月28日晚,南京聚隆发布2022年三季度报告。公司第三季度实现营业收入4 37亿元,同比增长10 56%;实现归属于上市公司股东净利润839 89万元,
信息:东方盛虹前三季度营收稳步增长 新能源新材料产品优势继续凸显 东方盛虹(000301)10月28日晚间披露2022年三季报,前三季度公司实现营业收入467 07亿元,同比增长16 17%;净利润15 77亿元,同比下降59 55%。在
今日热文:红日药业:10月27日公司高管姚小青减持公司股份合计88.1万股 证券之星讯,根据10月28日市场公开信息、上市公司公告及交易所披露数据整理,红日药业(300026)最新董监高及相关人员股份变动情况:2022年10
东杰智能:10月27日公司高管梁燕生、梁春生减持公司股份合计125.83万股 证券之星讯,根据10月28日市场公开信息、上市公司公告及交易所披露数据整理,东杰智能(300486)最新董监高及相关人员股份变动情况:2022年10
ARROW Home Group from Sanshui listed on Shenzhen Stock Exchange OnOctober26,ARROWHomeGroupwaslis...
【环球新视野】广东部署台风“尼格”防御工作 明天8时前海上作业渔船全回撤 10月28日8时,今年第22号台风“尼...
三水纬达光电成功过会 佛山企业首次登陆北交所 10月28日,北京证券交易所(以下简...
全球百事通!禅城“岭南文创IP100计划”发布 佛山新闻网讯佛山日报见习记者贺勇...