告别手动上传FTP!这套前端工程化流水线,让你一键发布,下班不加班

0 阅读3分钟

你是不是还在:改完代码,手动打包,然后打开FileZilla,拖拽文件到服务器,再刷新CDN缓存,等5分钟……然后同事说“你刚才上传覆盖了我的代码”?今天我们来搭建一条前端工程化流水线——从代码提交到自动部署,全程一键触发。以后你只需要git push,剩下的交给机器。

前言

想象你开了一家面馆。以前:客人点单 → 你写单子 → 跑去厨房喊“一碗牛肉面” → 厨师做 → 你端过去。一天下来腿都跑断。后来你装了“点菜系统”:客人手机下单 → 厨房屏幕自动显示 → 厨师做好 → 机器人送餐。你只需要坐在收银台数钱。

前端工程化就是这个“点菜系统”。它把重复、易错的手工操作变成自动化流程:代码检查、打包、测试、部署、通知……一条龙。今天我们就来搭一条基础但完整的流水线,让你摆脱手动FTP的原始时代。

一、工程化到底包含啥?

简单说:用工具和流程,让开发、构建、部署、运维自动化、规范化

核心环节:

  • 代码规范:ESLint + Prettier + Husky,不让烂代码进仓库。
  • 构建打包:Vite/Webpack,生产优化。
  • 自动化测试:单元测试、E2E测试(可选)。
  • 持续集成(CI):代码推送到Git,自动运行检查、打包。
  • 持续部署(CD):打包后自动上传服务器、刷新CDN。
  • 监控报警:Sentry、性能监控。

我们今天重点做CI/CD部分,因为这是让你“一键发布”的关键。

二、基础版:用Git Hooks做本地自动化

先不说服务器,在本地就能省掉很多步骤。

1. Husky + lint-staged:提交前自动格式化

npm install -D husky lint-staged
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"

package.json里配置:

"lint-staged": {
  "*.{js,ts,jsx,tsx}": ["eslint --fix", "prettier --write"],
  "*.{css,scss}": ["prettier --write"]
}

现在每次git commit,它会自动格式化你改动的文件,保证代码风格统一。

2. 提交信息规范(Commitlint)

npm install -D @commitlint/cli @commitlint/config-conventional
npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"

以后提交必须写成feat: 添加登录功能fix: 修复按钮样式,团队看历史一目了然。

三、进阶版:用GitHub Actions做服务器自动部署

这是核心:当你git push到主分支,GitHub自动拉取代码、安装依赖、打包、上传到服务器。

步骤1:准备服务器

你需要一台服务器(阿里云、腾讯云等),安装好Nginx,并且能通过SSH密钥登录。

步骤2:创建GitHub Actions工作流

在项目根目录创建.github/workflows/deploy.yml

name: Deploy to Server

on:
  push:
    branches: [ main ]  # 当推送到main分支时触发

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout代码
        uses: actions/checkout@v3

      - name: 安装Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: 安装依赖并打包
        run: |
          npm ci
          npm run build

      - name: 上传到服务器(通过rsync)
        uses: easingthemes/ssh-deploy@main
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
          ARGS: "-rlgoDzvc -i --delete"
          SOURCE: "dist/"
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          REMOTE_USER: ${{ secrets.REMOTE_USER }}
          TARGET: ${{ secrets.REMOTE_TARGET }}  # 比如 /var/www/html

步骤3:配置GitHub Secrets

在GitHub仓库 → Settings → Secrets and variables → Actions 里添加:

  • SERVER_SSH_KEY:服务器的私钥(注意是私钥,不是公钥)。
  • REMOTE_HOST:服务器IP或域名。
  • REMOTE_USER:登录用户名(如root或ubuntu)。
  • REMOTE_TARGET:服务器上的部署路径(如/var/www/myapp)。

步骤4:服务器上配置Nginx

把Nginx根目录指向/var/www/myapp。之后每次git push main,GitHub自动打包并同步到服务器,你甚至不用登录服务器。

四、更现代:用Docker + 云平台

如果不想自己配服务器,可以用VercelNetlify(前端静态托管),连接你的Git仓库,自动部署,免费。或者用阿里云OSS + CDN,配合GitHub Actions上传。

Docker方式:把项目打包成镜像,推送到阿里云容器镜像服务,然后服务器拉取运行。适合Node后端或需要复杂环境的项目。

五、测试自动化:CI里跑测试

在打包之前,可以先跑一遍单元测试,防止烂代码上线。

- name: Run tests
  run: npm test

如果测试失败,流程中断,不会部署。

六、通知:部署成功发消息到钉钉/飞书/企业微信

在最后一步加上Webhook通知:

- name: Send DingTalk notification
  run: |
    curl -X POST -H "Content-Type: application/json" \
    -d '{"msgtype":"text","text":{"content":"部署成功!"}}' \
    ${{ secrets.DINGTALK_WEBHOOK }}

这样每次部署成功,群里自动收到消息。

七、常见坑点

  • 打包产物路径不对:确保npm run build输出到dist/build/,和Action里的SOURCE一致。
  • SSH权限:私钥不要泄露,不要提交到仓库。服务器公钥要加到~/.ssh/authorized_keys
  • 环境变量:前端构建时需要API地址等变量,在GitHub Secrets里存,构建时注入。

八、总结:从手工到自动,你只差这套流程

  • 本地:Husky + lint-staged 保证代码质量。
  • 提交规范:Commitlint。
  • CI/CD:GitHub Actions + 服务器部署 / Vercel等平台。
  • 通知:钉钉/飞书机器人。

做完这些,你以后的工作流变成:git add .git commit -m "feat: xxx"git push。然后去喝杯咖啡,回来页面已经上线。再也不用打开FTP,再也不用担心覆盖同事代码。前端工程化,就是让你把时间花在写代码上,而不是“搬砖”。