news 2026/7/6 3:20:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端实现打包后自动上传代码到服务器

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

  • 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

控制台输出

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 16:48:06

GAZEBO室外仿真进阶:从零到一生成自定义高度图地形

1. 为什么需要自定义高度图地形 做机器人仿真最头疼的就是找不到合适的地形数据。官方示例里那些平整的停车场、简单的斜坡,根本没法测试算法在真实野外的表现。上周我尝试用公开数据集做丘陵地形仿真,结果发现要么分辨率太低,要么区域不符合…

作者头像 李华
网站建设 2026/7/6 3:20:46

如何永久保存微信聊天记录?WeChatMsg完全指南助你掌控个人数据资产

如何永久保存微信聊天记录?WeChatMsg完全指南助你掌控个人数据资产 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trend…

作者头像 李华
网站建设 2026/7/3 12:10:58

告别 C 风格 enum 的三宗罪:enum class 强类型枚举实战

告别 C 风格 enum 的三宗罪:enum class 强类型枚举实战 这个仓库已经开源!现代化 C(C11/14/17/20)从基础到进阶的系统教程都在这里,力争做一条完备的现代 C 学习路径!欢迎各位大佬前来参观,喜欢…

作者头像 李华
网站建设 2026/7/3 7:05:24

【AI大模型】本地推理:零基础运行第一个开源大模型

【AI大模型】本地推理:零基础运行第一个开源大模型(全套实操代码) 绝大多数AI新手的学习误区:长期依赖在线AI网页、第三方API接口调用大模型,始终无法掌握自主可控的大模型开发能力。在线接口存在付费昂贵、网络依赖、响应延迟、数据泄露、功能受限等诸多问题,而本地推理…

作者头像 李华
网站建设 2026/7/3 12:30:35

SMMU介绍(1)

SMMU所承担的任务,与处理核中的MMU类似,就是在I/O设备发出的DMA请求进入片上网络NOC互联结构之前,先对其地址进行转换处理。DMA地址需要被转换主要基于以下两个原因:隔离,防止IO设备随意访问物理内存;便捷&…

作者头像 李华