从前端代码到线上环境部署的完整流程与避坑指南

Tr° 会娟 工具 阅读 1,074
赞 8 收藏
二维码
手机扫码查看
反馈

先看效果,再看代码

最近刚上线了一个项目,前端部署这块折腾得够呛。如果你也在用Vite做项目开发,那我强烈建议你试试下面这套配置方法,亲测有效。

从前端代码到线上环境部署的完整流程与避坑指南

先上个最简化的配置代码:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  base: process.env.NODE_ENV === 'production' ? '/my-project/' : '/',
  build: {
    outDir: 'dist',
    assetsDir: 'static',
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
      }
    }
  }
})

这个配置看起来简单,但背后其实有很多坑要踩。下面我就来详细说说。

这个场景最好用

当你需要把前端项目部署到子路径时,比如 https://example.com/my-project/,这个配置就特别好用。重点在于base字段的设置,生产环境自动加上/my-project/前缀。

还有个很实用的地方是静态资源的组织方式。通过rollupOptions的设置,所有的JS文件都会输出到static/js/目录下,图片等资源会按类型分类存放,看着清爽多了。

踩坑提醒:这三点一定注意

第一个坑就是路由问题。如果你用的是Vue Router的history模式,必须记得在服务器端添加rewrite规则。像这样:

location /my-project/ {
  try_files $uri $uri/ /my-project/index.html;
}

第二个坑是环境变量的使用。有次我直接在代码里写死了API地址,结果测试环境和生产环境来回切换的时候差点崩溃。正确的做法是这样:

const API_URL = import.meta.env.VITE_APP_API_BASE || 'https://jztheme.com/api'

然后在.env文件里定义不同环境的变量:

# .env.production
VITE_APP_API_BASE=https://api.jztheme.com

# .env.development
VITE_APP_API_BASE=http://localhost:3000

一些进阶技巧分享

最近发现了个提升部署效率的小技巧。可以在package.json里加几个脚本:

{
  "scripts": {
    "build:test": "cross-env NODE_ENV=production vite build",
    "build:prod": "cross-env NODE_ENV=production vite build && npm run deploy",
    "deploy": "scp -r dist/* user@server:/var/www/html/my-project"
  }
}

这样每次部署只要执行npm run build:prod就能自动完成打包和上传。不过这里要注意,Linux服务器要提前配置好SSH密钥,不然每次都输密码会很烦。

最后再说点细节

关于缓存问题,很多人容易忽视。我的做法是在nginx配置里加上这些:

location ~* .(?:ico|css|js|gif|jpe?g|png)$ {
  expires 7d;
  add_header Cache-Control "public";
}

另外提一嘴CDN加速。如果项目访问量大,可以考虑把静态资源托管到CDN上。只需要改一下vite.config.js里的base

base: process.env.NODE_ENV === 'production' 
  ? 'https://cdn.jztheme.com/my-project/' 
  : '/'

总结一下

以上是我个人对前端部署的一些经验总结,特别是Vite项目的部署方案。从基础配置到自动化部署,再到性能优化,基本都涵盖了。当然这个技术的拓展用法还有很多,比如Docker容器化部署、CI/CD集成等等,后续我会继续分享这类博客。

如果你有更好的实践经验,欢迎在评论区交流。毕竟前端部署这块水挺深的,大家一起探讨才能进步。

本文章不代表JZTHEME立场,仅为作者个人观点 / 研究心得 / 经验分享,旨在交流探讨,供读者参考。
发表评论

暂无评论