前端vue项目打包及部署的详细说明

一、本地项目打包
1. 安装依赖

确保项目依赖完整:

npm install # 或 yarn install 
2. 环境配置

在项目根目录创建环境文件,区分开发和生产环境:

.env.production(生产环境)

NODE_ENV=production VUE_APP_API_BASE=https://api.your-domain.com

.env.development(开发环境)

NODE_ENV=development VUE_APP_API_BASE=http://localhost:3000/api
3. 执行打包命令

使用 Vue CLI 进行生产构建:

npm run build # 或 yarn build
  • 输出目录:默认生成 dist/ 文件夹,包含:
    • index.html(入口文件)
    • css/(样式文件)
    • js/(脚本文件)
    • fonts/(字体文件)
    • img/(图片资源)

二、打包优化
1. 分析构建体积

使用 webpack-bundle-analyzer 查看打包文件体积:

npm install --save-dev webpack-bundle-analyzer

在 vue.config.js 中配置:

module.exports = { chainWebpack: (config) => { config.plugin('webpack-bundle-analyzer') .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin); } }; 

运行分析:

npm run build -- --report 
2. 优化手段
  • 代码分割:动态导入组件(() => import('./Component.vue'))。
  • 压缩资源:启用 gzip/brotli 压缩。

CDN 引入:将 vuevue-router 等库通过 CDN 加载。

// vue.config.js module.exports = { configureWebpack: { externals: { vue: 'Vue', 'vue-router': 'VueRouter' } } }; 

三、部署方式
1. 静态托管服务(推荐)

适用于 NetlifyVercelGitHub Pages 等平台:

  1. 将 dist/ 目录推送到代码仓库。
  2. 在托管平台关联仓库,设置构建命令为 npm run build
  3. 配置自定义域名和 HTTPS。
2. 自有服务器(Nginx)
  1. 上传 dist/ 到服务器(如 /var/www/your-project)。

 重启 Nginx:

sudo systemctl restart nginx 

配置 Nginx:

server { listen 80; server_name your-domain.com; root /var/www/your-project/dist; index index.html; location / { try_files $uri $uri/ /index.html; # 支持 Vue Router 的 history 模式 } # 代理 API 请求 location /api { proxy_pass http://backend-server:3000; proxy_set_header Host $host; } } 
3. Docker 容器化部署

构建并运行容器:

docker build -t vue-app . docker run -d -p 8080:80 vue-app 

创建 Dockerfile

# 使用 Node 镜像构建 FROM node:16 as build-stage WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 使用 Nginx 镜像运行 FROM nginx:alpine as production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] 

四、常见问题与解决
1. 静态资源路径错误

在 vue.config.js 中配置 publicPath

module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/your-subpath/' : '/' }; 
2. 接口跨域问题

开发环境配置代理(vue.config.js):

module.exports = { devServer: { proxy: { '/api': { target: 'http://api-server:3000', changeOrigin: true } } } }; 
3. 浏览器缓存问题

为文件名添加哈希(默认已配置):

// vue.config.js module.exports = { filenameHashing: true // 生成形如 app.4a3b2c1d.js }; 

五、自动化部署(CI/CD)
1. GitHub Actions 示例

在 .github/workflows/deploy.yml 中配置:

name: Deploy on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 16 - run: npm install - run: npm run build - uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist 
2. Jenkins 流水线
pipeline { agent any stages { stage('Build') { steps { sh 'npm install' sh 'npm run build' } } stage('Deploy') { steps { sh 'scp -r dist/ user@server:/var/www/your-project' } } } } 

六、部署后验证

  1. 访问页面,检查功能是否正常。
  2. 使用 Chrome DevTools 的 Network 面板确认资源加载无误。
  3. 使用 Lighthouse 进行性能评分。

总结

  • 本地构建:npm run build 生成 dist/。
  • 部署方式:静态托管、自有服务器、Docker 容器化。
  • 优化核心:代码分割、CDN、缓存策略。
  • 自动化:集成 GitHub Actions/Jenkins 实现 CI/CD。

按此流程操作,可确保 Vue 项目高效、稳定地部署到生产环境。

Read more

五分钟入门控制算法:MPC(模型预测控制)算法

五分钟入门控制算法:MPC(模型预测控制)算法

什么是控制算法?         比如我现在的无人机悬浮在空中的某个位置,我想要让他以最短时间抬升悬浮到上方10m的位置,那我要具体如何去调整输入(如电流、油门、功率),以最好的性能(时间最短)来达到预期的目标呢?那就需要控制算法来求解,来调整这些输入。         控制算法(Control Algorithm)本质上是一套控制机械系统运作的“数学指挥指令”。它告诉机器(如无人机、恒温空调、机械臂)如何根据目前的状态,通过调整输入(如电流、油门、功率)来达到预期的目标。         不同的算法有不同的使用场景与特性,有些适用于动态系统,有些适用于静态。有些适用于低阶系统,有些适用于高阶系统。有些计算量小,有些计算量大。所以衍生出了很多种控制算法。         如何根据不同的场景选择合适的控制算法,创造更厉害的控制算法,调整控制算法的参数使得任务完成的效果更好;如何让实时波形图(如 rqt_plot)更加贴合跟踪曲线;如何对机械系统编写“保护逻辑” ;如何处理传感器噪声与延迟,用一些滤波算法(卡尔曼滤波)做更好的状态估计。如何增加前馈(

By Ne0inhk
LeetCode——双指针(进阶)

LeetCode——双指针(进阶)

文章目录 * 相关例题 * 快乐数 * 题目描述 * 题目分析 * 实现思路 * 实现代码 * 盛最多水的容器 * 题目描述 * 题目分析 * 实现思路 * 实现代码 * 有效三角形的个数 * 题目描述 * 题目分析 * 实现思路 * 实现代码 * 查找总价格为目标值的两个商品 * 题目描述 * 题目分析 * 实现思路 * 实现代码 * 四数之和 * 题目描述 * 题目分析 * 实现思路 * 实现代码 相关例题 快乐数 题目描述 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: * 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 * 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 * 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是

By Ne0inhk
【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-ZEEKLOG博客 对于本节我们要提前掌握前一节课堆的相关实现才能学好本次的知识,一定要多画图多敲代码看看实现的效果是啥(Crazy!)开始吧! 目录 一、堆排序 (一) 基于原有堆 (二) 原数组上直接建堆 1.向上调整算法建堆 2.向上调整算法建堆时间复杂度 3.向下调整算法建堆 4.向下调整算法建堆时间复杂度 二、TOP-K问题         ——————————————《Being in love》——————————————   一、堆排序 (一) 基于原有堆 结合下面的代码观看——创建一个数组,将数组里面的数据不断地入堆后建立了一个堆(假设是一个小堆),不断取堆顶数据打印后出堆(此操作循环),这样就可以实现排序。为什么这样就实现了排序呢?Because小堆的堆顶是堆里面的最小值,出堆时向下调整又变成了小堆,此时堆顶是剩下元素里面的最小值,就这样不断取堆顶(最小值)实现了升序操作。 但是,这样的排序方法我们必须提前实现一个堆,而且我们实现堆操作时至少要申请一块原排

By Ne0inhk
从零开始学java--二叉树和哈希表

从零开始学java--二叉树和哈希表

数据结构基础 目录 数据结构基础 树 树形结构: 树的概念: 二叉树 概念: 两种特殊的二叉树: 二叉树的性质: 创建一个简单的二叉树: 二叉树的遍历 前序遍历: 中序遍历: 后序遍历: 层序遍历: 二叉查找树和平衡二叉树 二叉查找树: 平衡二叉树: 红黑树 哈希表 树 树形结构: 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1. 有一个特殊的结点,称为根结点,根结点没有前驱结点。 2. 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 <= i

By Ne0inhk