前端实现打包后自动上传代码到服务器
前端实现打包后自动上传代码到服务器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、编写相关代码constpathrequire(path);constfsrequire(fs);constClientrequire(ssh2-sftp-client);constorarequire(ora);letspinnernullconstconfig{host:,// 服务器地址port:22,username:root,// 服务器账号要有生产项目发布的权限password:// 密码};lettotalFileCount0letnum0functionfoldFileCount(folderPath){letcount0;constfilesfs.readdirSync(folderPath);for(constfileoffiles){constfilePathpath.join(folderPath,file);conststatsfs.statSync(filePath);if(stats.isFile()){countcount1}elseif(stats.isDirectory()){countcountfoldFileCount(filePath);}}returncount;}asyncfunctionuploadFilesToRemote(localFolderPath,remoteFolderPath,sftp){constfilesfs.readdirSync(localFolderPath);for(constfileoffiles){letlocalFilePathpath.join(localFolderPath,file)letremoteFilePathpath.join(remoteFolderPath,file)remoteFilePathremoteFilePath.replace(/\\/g,/)conststatsfs.statSync(localFilePath)if(stats.isFile()){awaitsftp.put(localFilePath,remoteFilePath)numnum1letprogress((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;// 服务器项目文件夹totalFileCountfoldFileCount(localFolderPath)if(!totalFileCount)returnconstsftpnewClient()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文件夹成功);spinnerora(自动化脚本执行开始).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控制台输出打开测试环境页面刷新页面内容已经是最新的测试通过。

相关新闻

CircuitPython与MicroPython的模块差异与兼容性实践

CircuitPython与MicroPython的模块差异与兼容性实践

1. CircuitPython与MicroPython的核心模块差异 第一次接触CircuitPython的开发者,往往会惊讶于它与MicroPython在模块设计上的巨大差异。虽然两者都源自Python的嵌入式实现,但在实际使用中你会发现,从MicroPython迁移项目到CircuitPython时&a…

2026/6/30 15:50:04阅读更多 →
网络安全最火的五个就业方向,来看看哪个是你的菜?

网络安全最火的五个就业方向,来看看哪个是你的菜?

网络安全最火的五个就业方向,来看看哪个是你的菜? 有人问:“我学会渗透测试是不是就能当黑客了?”这真是很多小白最大的盲区! 现在的网安行业分工多着呢,今天,咱们就来扒一扒网安行业最火的5个…

2026/6/30 15:50:04阅读更多 →
AI驱动研发流程的根本性变化解析

AI驱动研发流程的根本性变化解析

核心观点摘要 AI正在从代码生成等单点工具向端到端研发全链路渗透,腾讯内部数据显示AI辅助已覆盖超90%工程师,整体研发效能提升超20%研发流程智能化转型的核心价值在于消除跨域协作损耗,通过流程引擎串联需求、设计、开发、测试、发布、运营…

2026/6/30 15:50:04阅读更多 →
嵌入式系统OTA升级

嵌入式系统OTA升级

嵌入式系统OTA升级:智能设备的空中进化术 在万物互联的时代,嵌入式系统已渗透到智能家居、工业设备、车载电子等各个领域。传统固件升级依赖物理接触或人工操作,效率低且成本高,而OTA(Over-The-Air)技术通…

2026/6/30 16:40:34阅读更多 →
FanControl终极指南:Windows风扇控制软件完全配置与优化教程

FanControl终极指南:Windows风扇控制软件完全配置与优化教程

FanControl终极指南:Windows风扇控制软件完全配置与优化教程 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…

2026/6/30 16:40:34阅读更多 →
AI率爆表怎么办?10款降AIGC工具实测(含免费降ai率工具)真实避坑指南

AI率爆表怎么办?10款降AIGC工具实测(含免费降ai率工具)真实避坑指南

最近这半年,我敢说,被“论文降aigc”折磨的同学,绝对比被查重折磨的还多。 说实话,现在这情况太难了。 你是不是也一样?有时候,你就是用AI帮你润色个摘要和前言,没写几个字,都可能被…

2026/6/30 16:40:34阅读更多 →
终极解决方案:3分钟在Windows系统轻松安装安卓APK应用

终极解决方案:3分钟在Windows系统轻松安装安卓APK应用

终极解决方案:3分钟在Windows系统轻松安装安卓APK应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为电脑无法直接安装手机应用而困扰?A…

2026/6/30 16:40:34阅读更多 →
技术专利的申请策略与知识产权保护

技术专利的申请策略与知识产权保护

技术专利的申请策略与知识产权保护 在当今高度竞争的商业环境中,技术专利的申请策略与知识产权保护成为企业创新的核心议题。专利不仅是技术实力的体现,更是企业获取市场竞争优势的重要工具。如何高效申请专利并确保知识产权不受侵犯,是许多…

2026/6/30 16:40:34阅读更多 →
U9的错误提示文字要求在服务器端才能看到

U9的错误提示文字要求在服务器端才能看到

U9一些错误提示,不会在客户端显示,而是要求用户去服务器端做同样的操作,才能知道具体的提示文字。这么麻烦!一直不明白其中的逻辑是什么。近来做PLM系统的数据交互的项目,调试过程中也发生同样的错误形式,因…

2026/6/30 16:35:34阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时,很多人会被它复杂的界面吓到。其实只要掌握几个核心区域,就能快速上手。我最开始用PPT时,经常找不到功能按钮在哪,后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时,我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果,但按错了就可能坠机。经过多年实战,我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →