当前位置: 首页 > news >正文

前端实现打包后自动上传代码到服务器

前端实现打包后自动上传代码到服务器

  • 1、背景
  • 1、安装依赖
  • 2、代码实现
        • 1、创建built.js文件,和package平级
        • 2、编写相关代码
        • 3、完善打包命令
        • 4、结果

1、背景

由于公司没有成熟的CI/CD流程,每次发布测试环境都要打开xftp,连接账号密码,公司电脑有比较卡,打开xftp都要反应半天,今天我实在是受不了了,于是就写了个脚本。

1、安装依赖

npm install ora-Dnpm install ssh2-sftp-client-D

因为只在开发阶段使用,所以只添加开发依赖

2、代码实现

1、创建built.js文件,和package平级
2、编写相关代码
constpath=require('path');constfs=require('fs');constClient=require('ssh2-sftp-client');constora=require('ora');letspinner=nullconstconfig={host:'',// 服务器地址port:'22',username:'root',// 服务器账号,要有生产项目发布的权限password:''// 密码};lettotalFileCount=0letnum=0functionfoldFileCount(folderPath){letcount=0;constfiles=fs.readdirSync(folderPath);for(constfileoffiles){constfilePath=path.join(folderPath,file);conststats=fs.statSync(filePath);if(stats.isFile()){count=count+1}elseif(stats.isDirectory()){count=count+foldFileCount(filePath);}}returncount;}asyncfunctionuploadFilesToRemote(localFolderPath,remoteFolderPath,sftp){constfiles=fs.readdirSync(localFolderPath);for(constfileoffiles){letlocalFilePath=path.join(localFolderPath,file)letremoteFilePath=path.join(remoteFolderPath,file)remoteFilePath=remoteFilePath.replace(/\\/g,'/')conststats=fs.statSync(localFilePath)if(stats.isFile()){awaitsftp.put(localFilePath,remoteFilePath)num=num+1letprogress=((num/totalFileCount)*100).toFixed(2)+'%'spinner.text='当前上传进度为:'+progress}elseif(stats.isDirectory()){awaitsftp.mkdir(remoteFilePath,true)awaituploadFilesToRemote(localFilePath,remoteFilePath,sftp)}}}asyncfunctionmain(){constlocalFolderPath='./dist';// 本地打包产物文件夹constremoteFolderPath='/opt/www/dist';// 服务器项目文件夹totalFileCount=foldFileCount(localFolderPath)if(!totalFileCount)returnconstsftp=newClient()try{console.log('连接服务器');awaitsftp.connect(config);console.log('服务器连接成功');console.log('删除旧的dist文件夹');awaitsftp.rmdir(remoteFolderPath,true)console.log('删除旧的dist文件夹成功');console.log('新建新的dist文件夹');awaitsftp.mkdir(remoteFolderPath,true)console.log('新建新的dist文件夹成功');spinner=ora('自动化脚本执行开始').start()awaituploadFilesToRemote(localFolderPath,remoteFolderPath,sftp)}catch(err){console.log("出现错误")console.log(err);}finally{sftp.end();spinner.info('自动化脚本执行结束')}}main();
3、完善打包命令

改造原有打包命令,添加 && node ./built-dev.js ,这样打包完成后会自动执行测试环境发布任务,再也不会忘记发版,等测试测的时候,找出来几个bug,最后发现是测试环境没法发布最新代码。

"build:dev":"dotenv -e .env.development node scripts/build.js && node ./built-dev.js",
4、结果

执行命令

npm run build:dev

控制台输出

打开测试环境页面,刷新页面,内容已经是最新的,测试通过。

http://www.jsqmd.com/news/1096918/

相关文章:

  • 开源AIOps革命:Keep平台如何重塑企业级智能运维架构
  • Typora 1.8.2 保姆级配置指南:从图片管理到自动保存,一次搞定所有隐藏设置
  • 专业网盘直链下载工具LinkSwift深度解析与实战配置指南
  • Zotero插件生态与高效文献管理实战:从基础配置到进阶工作流
  • 从MicroLogix升级到Micro800?手把手教你用CCW 22.0搞定PCCC通信迁移
  • 3步搞定!在Windows上轻松安装Android应用的终极方案
  • 从理论到实践:基于切比雪夫原型的宽带低通匹配网络设计全解析
  • 电价上涨、芯片交期30周:AI算力狂欢下,制造业的“成本焦虑”何解?
  • JDK系列01:Java环境搭建与JDK版本区别,JDK8/11/17安装、环境变量配置全教程
  • 考虑网络安全职业?这些就业趋势告诉你答案
  • C语言实战:cJSON库在嵌入式网络通信中的配置数据封装与解析
  • 【MATLAB】异构无人机集群协同飞行控制仿真
  • [CrackMe]Chafe.1.exe的逆向分析与算法还原实战
  • Attu在Mac M芯片上提示“已损坏“?一文解决安装与兼容性问题
  • 在Windows程序启动前就动手:用TLS回调函数实现DLL加载监控(附完整C++代码)
  • 深度学习优化器演进之路:从SGD到Adam的核心思想与实战选择
  • 零基础 Vibe Coding 教程 settings.json CLAUDE.md 26-32
  • QQ空间备份终极指南:一键永久保存你的青春记忆
  • 「实践」CosineLRScheduler:从理论到代码的平滑训练指南
  • Google工程师开发爆火开源工具却被解雇,官方同款随后宣布推出引热议!
  • 马克·吐温:从密西西比河到世界文坛,一部美国精神的成长史
  • iObjects Java 部署实战:从零到一的避坑指南
  • CMake语法
  • 【MATLAB】无人机编队故障成员替换重构策略
  • 掌握Vue3 第二十四章:解锁兄弟组件通信的两种高效模式
  • 告别手写!用Playwright Codegen录制脚本,5分钟搞定Web自动化测试
  • windows怎么打开后缀为epub的文件
  • 若依Vue3框架:深度解析侧边栏菜单的默认展开与状态管理
  • Kali APT 仓库数字签名缺失:从报错到安全更新的解决之道
  • 深度解析:如何实现浏览器Cookie安全本地化导出的终极方案