您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

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

时间:2022-06-27 09:37:40  来源:  作者:楚云梦里

背景介绍

前面在基于bat脚本的前端发布流程设计与实现中,我已经介绍了设计与实现,这一篇主要是针对其的一个优化折腾(分两步走,第一步先搞出来,第二步再想着怎么去优化它),我主要做了以下几件事。

  • "各个击破" ------ 更细粒度地拆分构建、打包、上传模块,逻辑更清晰,维护更简便,程序更鲁棒
  • "条条大路通杭州" ------ 更改了压缩zip的实现逻辑(npm pkg - archiver)
  • "打扫干净屋子再请客" ----- 追加了清理之前的文件的逻辑
  • "鸡蛋放一个篮子里" ------ 把生成的文件移到根目录,更加直观了
  • "火影分身术" ------ 支持多进程打包,可以并行搞多个子项目
  • "一网打尽" ------ 抽离了上传的逻辑放最后一把梭哈

下面我以一个项目为例,着重向大家介绍我是怎么一步步折腾的。

archiver包实现文件打包

这里你问我为什么之前已经实现了bat脚本结合vbs脚本的文件压缩,还要再搞一套?我也很难回答你为什么,就是玩哇,学编程搞技术爱折腾呗,我是个jser,同时也是个tser,想到用npm构建也合情合理。
我这里主要是用到了一个库叫archiver,它的官网是
https://www.archiverjs.com/,代码的一些细节我已经写了注释了,这里就不过多介绍,我大致的思路是,在文件构建完以后,定义下要打包的目录,然后按照${项目名}-dist-${时间}.zip的格式打包,这里需要注意的是,当月份小于10的时候它下面代码输出的是M而不是MM,这个本身是做一个标识,要抹平这部分差异无非也就是多写几句话,我在这件事情上没有强迫症,所有我就没抹平。

const fs = require('fs')
const path = require('path')
const archiver = require('archiver')

// 项目的文件目录
const baseDir = path.join(__dirname, '../')

// 格式化当前时间,这里需要注意如果月份小于10的话是M而不是MM输出,仅做个发版标记,那就没必要强迫症对齐YYYY-MM-DD hh:mm:ss
const [foo, bar] = new Date().toLocaleString().split(' ')
const time = `${foo.replaceAll('/', '')}${bar.replaceAll(':', '')}`

// 这里用数组,是因为如果你还想打包其他的文件目录或者文件,就放到这个数组里
const target = ['dist']

// 打包输出*-dist-*.zip
const output = fs.createWriteStream(`${baseDir}/App-dist-${time}.zip`)
const archive = archiver('zip', {
  zlib: { level: 9 }
})

// 打包错误处理
archive.on('error', (err) => {
  throw err
})

// 完结撒花,输出文件路径,文件大小
output.on('close', () => {
  console.log(`生成打包文件成功,大小为${(archive.pointer() / 1024 / 1024).toFixed(1)}MB,系统路径在 ${baseDir}app-dist-${time}.zip`)
})

archive.pipe(output)
// eslint-disable-next-line no-restricted-syntax
for (const item of target) {
  archive.directory(item, item)
}
archive.finalize()

值得一提的是,之前我们都是打包到对应的子目录,这样子我还要翻几下去看,给它优化掉去吧,直接打包完放根目录

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

 

关于构建脚本粒度细化这件事

软件工程上面说,你要做好一个东西,不能写的一坨浆糊一样,应该考虑每个模块它干了什么,模块的职责应该是单一的,同时维护起来也应该是简单的,从这些方面考虑,我们重构之前写的脚本,分三步哈,先清理 ——> 再构建完打包 ——> 再上传, 流程是这样子的。

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

 

先清理

上次忘记说清理这件事了,为什么我上次会忘呢?这里我还要谢谢git,它打包完后传到linux服务器,不是可以通过discard change这个魔法让打包后的文件消失嘛,所以我之前就是通过这么干的。

那我们来实现下删除打包后的*.zip文件,其实也很简单

cd %~dp0
del /a/f/q "*.zip" 

如果说你想层级递归 /s加一下就可以了。

再构建完打包

在子项目中
构建没什么好说的,大部分项目npm run build一把梭。
打包这里我们分两步走,在子文件的package.json里面贴入如下内容:

...
"scripts": {
  "zip": "node zip.js",
  "build:zip": "npm run build && npm run zip"
}
...

然后新建一个build.bat, 内容如下:

call npm run build:zip
exit

这里call表示,等楼上的npm命令执行完再往下走,就会走到exit那里,这里这么写为了更好地利用cpu来处理,有可能你有很多个项目,但一个时间段就开一个进程去构建,显然是有点委屈了我那8核的CPU,这么搞以后,在父项目下执行构建就可以同时构建多个项目了,构建完自动退出,这不就是小时候看的动画片中的影分身嘛。

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

 

在父项目中的build.bat脚本如下

cd /D %~dp0NotePBL-app
start call build.bat
cd /D %~dp0NotePBL-biz
start call build.bat
cd /D %~dp0NotePBL-fin
start call build.bat

再上传

上传这里,为了避免每次输入密码,我建议你参考我之前写的第一篇,配到ssh里面,然后就很简单了,需要用到哪个包就传哪个,

cd %~dp0
scp app-*.zip root@这里填对应服务器的地址:这里填写对应服务器的路径
scp biz-*.zip root@这里填对应服务器的地址:这里填写对应服务器的路径
scp fin-*.zip root@这里填对应服务器的地址:这里填写对应服务器的路径

最后整合的deploy.bat就是这样啦

@echo off
setlocal enabledelayedexpansion 
@REM 中电惠融项目构建脚本,Zheng JiangTao(admin@qq.com)
chcp 65001
cls
cd /D %~dp0
echo ==========(∩•̀ω•́)⊃-*⋆中电惠融项目构建脚本⋆*-⊂(•̀ω•́∩)==========
:start
cd %~dp0
call clean.bat
cd /D %~dp0
start /wAIt call build.bat
cd /D %~dp0
start /wait call upload.bat
echo ========*:ஐ٩(๑´ᵕ`)۶ஐ:*中电惠融项目构建脚本*:ஐ٩(๑´ᵕ`)۶ஐ:*========
:finish
exit /b 

这次不是自动挡的车,带了点手动挡,除了把模块拆分之外,也给与相关开发手动发车的感觉,嗯。

FAQ

如果项目就单纯的一个,没有这么多子项目有什么好的建议吗?

那我建议你直接npm一把梭,具体是这样子的。
有个npm包叫rimraf ,地址是
https://www.npmjs.com/package/rimraf,可以实现删除文件,安装一下把package.json构建脚本改下

 ...
 "scripts": {
   "clean": "rimraf app-dist-*.zip",
   "zip": "node zip.js",
   "build:cz": "npm run build && npm run clean && npm run zip",
 }
 ...

如果多个项目,只改了其中一两个子项目有什么好的建议吗?

这就是我上面说的手动挡留的口子,在对应的build.bat文件和upload.bat文件下把不要的注释掉就好了。



Tags:bat脚本   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
基于bat脚本的前端发布流程的优化
背景介绍前面在基于bat脚本的前端发布流程设计与实现中,我已经介绍了设计与实现,这一篇主要是针对其的一个优化折腾(分两步走,第一步先搞出来,第二步再想着怎么去优化它),我主要做...【详细内容】
2022-06-27  Search: bat脚本  点击:(380)  评论:(0)  加入收藏
Windows下bat脚本修改网卡ip
1.创建一个txt文件,并把贴入如下代码: 把网卡设置ip为192.168.1.10 掩码255.255.255.0 网关192.168.1.0 @echo off%1 mshta vbscript:CreateObject("Shell.Application").Shel...【详细内容】
2022-02-23  Search: bat脚本  点击:(915)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(14)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(17)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown —— 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(23)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(29)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(37)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(27)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(78)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(85)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(47)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(78)  评论:(0)  加入收藏
站内最新
站内热门
站内头条