一、背景说明

本项目基于:

  • Vue 3(或 Vue CLI 项目结构)
  • Element Plus
  • 自定义 Node 脚本实现自动化部署(SFTP)

🚀 二、核心命令说明

1️⃣ 开发环境发布

npm run release-dev

实际执行内容:

vue-cli-service build && node ./release.server.js dev

2️⃣ 生产环境发布

npm run release-prod

实际执行内容:

vue-cli-service build && node ./release.server.js prod

⚙️ 三、整体发布流程

执行 npm run release-xxx
        ↓
1. 前端项目打包(build)
        ↓
2. 生成静态资源(HTML / JS / CSS)
        ↓
3. 执行 release.server.js
        ↓
4. 通过 SFTP 连接服务器
        ↓
5. 上传文件到指定目录
        ↓
6. 发布完成

📁 四、构建阶段说明

使用工具

  • Vue CLI

构建命令

vue-cli-service build

输出目录

pc-last/

⚠️ 需在 vue.config.js 中配置:

module.exports = {
  outputDir: "pc-last"
}

🔧 五、部署脚本(release.server.js)

1️⃣ 环境区分

node release.server.js dev
node release.server.js prod

2️⃣ 发布策略

🔹 dev(测试环境)

删除旧目录
↓
上传新文件

👉 特点:

  • 简单粗暴
  • 无备份
  • 适合测试

🔹 prod(生产环境)

旧目录重命名(备份)
↓
上传新文件

👉 示例:

pc → pc_2026-04-02_10:30

👉 特点:

  • 支持回滚
  • 更安全

3️⃣ 核心能力

  • SFTP 连接服务器
  • 递归上传目录
  • 自动备份(生产环境)
  • 上传日志输出

⚠️ 六、注意事项(重要)

❗ 1. 环境变量问题

目前问题没有暴露出来,因为项目中没有.env文件,如果有则存在风险:

❌ 场景1:接口打错环境

你发布 dev
但请求的是生产接口

👉 结果:

  • 测试数据污染生产 ❌
  • 查问题非常痛苦 ❌

❌ 场景2:CDN路径错误

静态资源路径指向生产CDN

❌ 场景3:调试开关关闭

dev 环境看不到日志

当前写法:

vue-cli-service build

👉 默认是 production 模式

✅ 必须优化:

📌 对应加载:

命令

加载文件

--mode dev

.env.dev

--mode prod

.env.prod.env.production

"release-dev": "vue-cli-service build --mode dev && node ./release.server.js dev",
"release-prod": "vue-cli-service build --mode prod && node ./release.server.js prod"

❗ 2. 输出目录必须一致

构建目录 ≠ 上传目录 → 发布失败

❗ 3. 删除目录风险(dev)

client.rmdir(dst, true);

👉 风险:

  • 路径错误会误删服务器文件

❗ 4. 明文服务器密码(安全问题)

password: "xxx"

✅ 建议:

process.env.SSH_PASSWORD

💡 七、标准发布流程(推荐操作)

✅ 开发环境发布

npm run release-dev

✅ 生产环境发布

npm run release-prod

👉 建议:

  • 发布前确认代码
  • 确认环境变量
  • 确认服务器路径
  • 手动打包替换Linux文件发布

🔁 八、回滚方案(生产环境)

目录结构示例

/pc                当前版本
/pc_2026-04-02     历史版本

回滚方式

mv pc pc_bad
mv pc_2026-04-02 pc

🧠 九、一句话总结

release-dev / release-prod 本质是:前端打包 + Node 脚本通过 SFTP 自动部署到服务器(dev 直接覆盖,prod 先备份再发布)


🎯 十、后续优化方向(进阶)

  • 引入 CI/CD(JenkinsI)
  • 使用环境变量管理敏感信息
  • 支持版本号发布(tag)
  • 增加灰度发布能力
  • Docker 化部署

 

更多推荐