迅闻网
让更多人看到你

基于bat脚本的前端发布流程的优化

前面在根据bat脚本的前端发布流程规划与完成中,我现已介绍了规划与完成,这一篇首要是针对其的一个优化折腾(分两步走,第一步先搞出来,第二步再想着怎样去优化它),我首要做了以下几件事。
“各个击破”——更细粒度地拆分构建、打包、上传模块,逻辑更清晰,保护更简洁,程序更鲁棒
“条条大路通杭州”——更改了压缩zip的完成逻辑(npmpkg-archiver)
“打扫洁净屋子再请客”—–追加了整理之前的文件的逻辑
“鸡蛋放一个篮子里”——把生成的文件移到根目录,更加直观了
“火影兼顾术”——支持多进程打包,可以并行搞多个子项目
“一扫而光”——抽离了上传的逻辑放最终一把梭哈
下面我以一个项目为例,侧重向咱们介绍我是怎样一步步折腾的。
archiver包完成文件打包
这儿你问我为什么之前现已完成了bat脚本结合vbs脚本的文件压缩,还要再搞一套?我也很难回答你为什么,便是玩哇,学编程搞技术爱折腾呗,我是个jser,一起也是个tser,想到用npm构建也入情入理。我这儿首要是用到了一个库叫archiver,它的官网是https://www.archiverjs.com/,代码的一些细节我现已写了注释了,这儿就不过多介绍,我大致的思路是,在文件构建完今后,定义下要打包的目录,然后依照${项目名}-dist-${时刻}.zip的格局打包,这儿需求留意的是,当月份小于10的时候它下面代码输出的是M而不是MM,这个自身是做一个标识,要抹平这部分差异无非也便是多写几句话,我在这件事情上没有强迫症,一切我就没抹平。

bat
constfs=require(‘fs’)
constpath=require(‘path’)
constarchiver=require(‘archiver’)
//项目的文件目录
constbaseDir=path.join(__dirname,’../’)
//格局化当时时刻,这儿需求留意假如月份小于10的话是M而不是MM输出,仅做个发版符号,那就没必要强迫症对齐YYYY-MM-DDhh:mm:ss
const[foo,bar]=newDate().toLocaleString().split(”)
consttime=`${foo.replaceAll(‘/’,”)}${bar.replaceAll(‘:’,”)}`
//这儿用数组,是因为假如你还想打包其他的文件目录或者文件,就放到这个数组里
consttarget=[‘dist’]
//打包输出*-dist-*.zip
constoutput=fs.createWriteStream(`${baseDir}/app-dist-${time}.zip`)
constarchive=archiver(‘zip’,{
zlib:{level:9}
})
//打包错误处理
archive.on(‘error’,(err)=>{
throwerr
})
//结束撒花,输出文件途径,文件巨细
output.on(‘close’,()=>{
console.log(`生成打包文件成功,巨细为${(archive.pointer()/1024/1024).toFixed(1)}MB,系统途径在${baseDir}app-dist-${time}.zip`)
})
archive.pipe(output)
//eslint-disable-next-lineno-restricted-syntaxfor(constitemoftarget){
archive.directory(item,item)
}
archive.finalize()
值得一提的是,之前咱们都是打包到对应的子目录,这姿态我还要翻几下去看,给它优化掉去吧,直接打包完放根目录
关于构建脚本粒度细化这件事
软件工程上面说,你要做好一个东西,不能写的一坨浆糊相同,应该考虑每个模块它干了什么,模块的职责应该是单一的,一起保护起来也应该是简单的,从这些方面考虑,咱们重构之前写的脚本,分三步哈,先整理——>再构建完打包——>再上传,流程是这姿态的。
先整理
前次忘掉说整理这件事了,为什么我前次会忘呢?这儿我还要谢谢git,它打包完后传到linux服务器,不是可以经过discardchange这个魔法让打包后的文件消失嘛,所以我之前便是经过这么干的。
那咱们来完成下删去打包后的*.zip文件,其实也很简单
cd%~dp0
del/a/f/q”*.zip”
假如说你想层级递归/s加一下就可以了。
再构建完打包
在子项目中构建没什么好说的,大部分项目npmrunbuild一把梭。打包这儿咱们分两步走,在子文件的package.json里边贴入如下内容:
…”scripts”:{
“zip”:”nodezip.js”,
“build:zip”:”npmrunbuild&&npmrunzip”}

然后新建一个build.bat,内容如下:
callnpmrunbuild:zipexit
这儿call表明,等楼上的npm命令履行完再往下走,就会走到exit那里,这儿这么写为了更好地利用cpu来处理,有或许你有很多个项目,但一个时刻段就开一个进程去构建,显然是有点冤枉了我那8核的CPU,这么搞今后,在父项目下履行构建就可以一起构建多个项目了,构建完自动退出,这不便是小时候看的动画片中的影兼顾嘛。
在父项目中的build.bat脚本如下
cd/D%~dp0\NotePBL-app
startcallbuild.batcd/D%~dp0\NotePBL-biz
startcallbuild.batcd/D%~dp0\NotePBL-fin
startcallbuild.bat
再上传
上传这儿,为了防止每次输入密码,我主张你参考我之前写的第一篇,配到ssh里边,然后就很简单了,需求用到哪个包就传哪个,
cd%~dp0
scpapp-*.ziproot@这儿填对应服务器的地址:这儿填写对应服务器的途径
scpbiz-*.ziproot@这儿填对应服务器的地址:这儿填写对应服务器的途径
scpfin-*.ziproot@这儿填对应服务器的地址:这儿填写对应服务器的途径
最终整合的deploy.bat便是这样啦
@echooff
setlocalenabledelayedexpansion
@REM中电惠融项目构建脚本,ZhengJiangTao(admin@qq.com)
chcp65001
clscd/D%~dp0echo==========(∩??ω??)?-*?中电惠融项目构建脚本?*-?(??ω??∩)==========
:startcd%~dp0
callclean.batcd/D%~dp0
start/waitcallbuild.batcd/D%~dp0
start/waitcallupload.batecho========*:??(?′?`)??:*中电惠融项目构建脚本*:??(?′?`)??:*========
:finishexit/b
这次不是自动挡的车,带了点手动挡,除了把模块拆分之外,也给与相关开发手动发车的感觉,嗯。
FAQ
假如项目就单纯的一个,没有这么多子项目有什么好的主张吗?
那我主张你直接npm一把梭,具体是这姿态的。有个npm包叫rimraf,地址是https://www.npmjs.com/package/rimraf,可以完成删去文件,装置一下把package.json构建脚本改下

“scripts”:{
“clean”:”rimrafapp-dist-*.zip”,
“zip”:”nodezip.js”,
“build:cz”:”npmrunbuild&&npmrunclean&&npmrunzip”,
}

假如多个项目,只改了其中一两个子项目有什么好的主张吗?
这便是我上面说的手动挡留的口子,在对应的build.bat文件和upload.bat文件下把不要的注释掉就好了。

未经允许不得转载:迅闻网 » 基于bat脚本的前端发布流程的优化
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页