JeeSite打包部署:生产环境配置详解
还在为JeeSite项目部署到生产环境而烦恼吗?面对复杂的配置选项和性能优化需求,如何确保应用稳定高效运行?本文将为你全面解析JeeSite Vue3项目的生产环境打包部署策略,从基础配置到高级优化,一文搞定所有部署难题。
读完本文你将获得
- ✅ JeeSite生产环境打包完整配置指南
- ✅ 环境变量管理与多环境部署策略
- ✅ 性能优化与安全加固最佳实践
- ✅ Nginx配置与CDN加速方案
- ✅ 容器化部署与监控方案
环境配置与多环境管理
环境变量配置文件
JeeSite采用Vite构建工具,支持多环境配置管理。核心配置文件包括:
.env # 全局环境变量
.env.development # 开发环境配置
.env.production # 生产环境配置
.env.tomcat # Tomcat部署专用配置
生产环境配置示例
# .env.production
VITE_GLOB_API_URL=https://api.yourdomain.com
VITE_GLOB_API_URL_PREFIX=/js
VITE_PUBLIC_PATH=/
VITE_PORT=3100
VITE_DROP_CONSOLE=true
VITE_OUTPUT_DIR=dist
环境变量解析机制
JeeSite通过自定义的wrapperEnv函数处理环境变量:
// packages/vite/config/index.ts
export function wrapperEnv(envConf: Recordable): ViteEnv {
const ret: any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, '\n');
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
if (envName === 'VITE_PORT') realName = Number(realName);
if (envName === 'VITE_PROXY' && realName) {
try { realName = JSON.parse(realName.replace(/'/g, '"')); }
catch (error) { realName = ''; }
}
ret[envName] = realName;
}
return ret;
}
构建配置详解
Vite构建配置
// web/vite.config.ts
export default defineConfig(async ({ command, mode }: ConfigEnv) => {
const isBuild = command === 'build';
const viteEnv = wrapperEnv(loadEnv(mode, root));
return {
root,
base: viteEnv.VITE_PUBLIC_PATH,
plugins: createVitePlugins(isBuild, viteEnv),
server: createServerOptions(viteEnv),
build: createBuildOptions(viteEnv),
css: createCSSOptions(),
resolve: { alias: { '@jeesite/web': path.resolve(__dirname, './') } }
};
});
构建优化配置
// packages/vite/options/build.ts
export function createBuildOptions(viteEnv: ViteEnv): BuildOptions {
const timestamp = new Date().getTime();
return {
cssTarget: 'chrome80',
outDir: viteEnv.VITE_OUTPUT_DIR ?? 'dist',
reportCompressedSize: false,
chunkSizeWarningLimit: 9000,
rollupOptions: {
output: {
entryFileNames: `assets/[name]-[hash]-${timestamp}.js`,
// manualChunks: { // 代码分割优化
// vue: ['vue', 'vue-router', 'pinia'],
// antdv: ['ant-design-vue', '@ant-design/icons-vue'],
// },
},
},
};
}
CSS预处理配置
// packages/vite/options/css.ts
export function createCSSOptions(): CSSOptions {
return {
preprocessorOptions: {
less: {
modifyVars: generateModifyVars(), // 主题变量配置
javascriptEnabled: true,
},
},
};
}
打包部署命令
标准生产环境打包
# 生产环境打包
pnpm build
# 等同于
vite build --mode production
Tomcat环境专用打包
# Tomcat部署(解决路径问题)
pnpm build:tomcat
# 等同于
vite build --mode tomcat --emptyOutDir
构建产物分析
# 生成构建分析报告
pnpm report
# 预览构建结果
pnpm preview:dist
Nginx生产环境配置
基础Nginx配置
server {
listen 80;
server_name yourdomain.com;
# 静态资源服务
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# API代理配置
location /js/ {
proxy_pass https://api.yourdomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
高级Nginx优化配置
# Gzip压缩配置
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript
application/javascript application/xml+rss
application/json image/svg+xml;
# 安全头部
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# 客户端缓存控制
location ~* \.(js|css)$ {
expires 6M;
add_header Cache-Control "public, immutable";
}
容器化部署方案
Dockerfile配置
# 多阶段构建Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install
COPY . .
RUN pnpm build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Docker Compose部署
version: '3.8'
services:
jeesite-frontend:
build: .
ports:
- "80:80"
environment:
- VITE_GLOB_API_URL=https://api.yourdomain.com
restart: unless-stopped
networks:
- jeesite-network
networks:
jeesite-network:
driver: bridge
性能优化策略
构建时优化
// 代码分割配置
manualChunks: {
vue: ['vue', 'vue-router', 'pinia'],
antdv: ['ant-design-vue', '@ant-design/icons-vue'],
utils: ['lodash-es', 'dayjs', 'axios']
}
// 压缩配置
minify: 'terser',
terserOptions: {
compress: {
drop_console: true, // 移除console.log
drop_debugger: true // 移除debugger
}
}
运行时优化
// 组件懒加载
const UserManagement = defineAsyncComponent(() =>
import('./views/system/UserManagement.vue')
);
// 路由懒加载
{
path: '/system/user',
component: () => import('@/views/system/UserManagement.vue'),
name: 'SystemUser'
}
安全加固措施
环境安全配置
# 禁用开发工具
VITE_DROP_CONSOLE=true
# 设置合适的CORS策略
VITE_PROXY=[["/js","https://api.yourdomain.com",true]]
# 内容安全策略
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'
网络安全头部
# 安全响应头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
监控与日志
性能监控配置
// 前端性能监控
import { onCLS, onFID, onLCP } from 'web-vitals';
onCLS(console.log);
onFID(console.log);
onLCP(console.log);
// 错误监控
window.addEventListener('error', (event) => {
console.error('Global error:', event.error);
});
日志收集方案
# Nginx访问日志
access_log /var/log/nginx/jeesite-access.log main;
error_log /var/log/nginx/jeesite-error.log warn;
# 日志格式定义
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
部署流程总结
标准部署流程
各环境配置对比
| 环境类型 | 构建命令 | 输出目录 | 特点说明 |
|---|---|---|---|
| 开发环境 | pnpm dev | 内存 | 热重载,便于调试 |
| 生产环境 | pnpm build | dist/ | 优化压缩,去除调试信息 |
| Tomcat环境 | pnpm build:tomcat | dist/ | 解决路径问题,适配Tomcat |
| 预览环境 | pnpm preview | dist/ | 本地验证构建结果 |
常见问题排查
构建失败排查
-
依赖安装问题
# 清理缓存重新安装 rm -rf node_modules pnpm-lock.yaml pnpm install -
内存不足问题
# 增加Node.js内存限制 export NODE_OPTIONS="--max-old-space-size=4096" -
权限问题
# 修复文件权限 chmod -R 755 dist/
运行时问题
-
白屏问题
- 检查Nginx配置是否正确
- 验证静态资源路径
- 查看浏览器控制台错误信息
-
API请求失败
- 检查代理配置
- 验证后端服务状态
- 查看网络请求详情
总结与最佳实践
通过本文的详细解析,你应该已经掌握了JeeSite Vue3项目在生产环境下的完整部署流程。记住以下几个关键点:
- 环境隔离:严格区分开发、测试、生产环境配置
- 构建优化:合理配置代码分割和压缩选项
- 安全加固:配置适当的安全头部和CSP策略
- 性能监控:建立完善的监控和日志体系
- 自动化部署:采用CI/CD流水线提升部署效率
JeeSite作为一个成熟的企业级快速开发平台,其部署配置虽然复杂但非常规范。遵循本文的指导,你就能轻松应对各种生产环境部署挑战,确保应用稳定高效运行。
下一步行动:立即尝试按照本文指南配置你的生产环境,如在实践中遇到问题,欢迎在评论区交流讨论!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



