vue之配置生产环境和开发环境的打包命令及版本自动更新


前言

在开发过程中,总会遇到线上功能已经在使用的过程中要开发一些新的功能,而这些功能可能会影响已上线功能,这时候需要另辟一个环境用来测试;而且每个环境还要作区分,每次打包的版本都不一样;那么这篇文章就正好可以看看了。


1.在与src同级目录下新建.env.development(开发)和.env.production(生产)文件在这里插入图片描述

2. 在.env.development文件中写入

NODE_ENV = 'development'
VUE_APP_MODE = 'development'
VUE_APP_API_URL = 'https://xxx/test' //开发环境域名
VUE_APP_VERSION= 0.0.2//开发环境版本号

3. 在.env.production文件中写入

NODE_ENV = 'production'
VUE_APP_MODE = 'production'
VUE_APP_API_URL = 'https://xxx' //生产环境域名
VUE_APP_VERSION= 0.0.1//生产环境版本号

4. 在package.json文件中配置打包命令

在这里插入图片描述

	"scripts": {
		"serve": "vue-cli-service serve",
		"build": "vue-cli-service build",
		"build:dev": "vue-cli-service build --mode development",
		"lint": "vue-cli-service lint"
	},

5. 在vue.config.js文件中配置版本号更新

const { defineConfig } = require('@vue/cli-service')
const fs = require('fs');
module.exports = defineConfig({
  publicPath:'./',
  transpileDependencies: true,
  lintOnSave: false,
  css: {
    loaderOptions: {
        less: {
            lessOptions: {
                modifyVars: {
                    'primary-color': '#ec6800'
                },
                javascriptEnabled: true,
            },
        },
    },
  },
  chainWebpack: (config) => {
    if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development') {
      config.plugin('define').tap((args) => {
        const env = args[0]['process.env'];
        const version = getVersion();
        env.VUE_APP_VERSION = JSON.stringify(version);
        return args;
      });
    }
  }
})
function getVersion() {
  const envFile = process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development';
  const envContent = fs.readFileSync(envFile, 'utf8');
  const version = envContent.match(/VUE_APP_VERSION=(.*)/)[1];
  const newVersion = incrementVersion(version);
  updateVersion(envFile, newVersion);
  return newVersion;
}

function incrementVersion(version) {
  const parts = version.split('.'); // 将版本号拆分为部

  // 将每部分转换为数字
  const major = parseInt(parts[0]);
  const minor = parseInt(parts[1]);
  const patch = parseInt(parts[2]);

  if (patch < 9) {
    // 如果 patch 小 9,则递增 patch 部分
    parts[2] = (patch + 1).toString();
  } else if (minor < 9) {
    // 如果 patch 达到 9,但 minor 小于 9,则将 patch 重置为 0,递增 minor
    parts[1] = (minor + 1).toString();
    parts[2] = '0';
  } else {
 // 如果 patch 和 minor 都达到 9,则将它们重置为 0,递增 major
    parts[0] = (major + 1).toString();
    parts[1] = '0';
    parts[2] = '0';
  }

  return parts.join('.'); // 将部分合并为的版本号
}
const getPackageJson = () => {
  let data = fs.readFileSync('./package.json') //fs读取文件
  return JSON.parse(data) //转换为json对象
}

function updateVersion(envFile, newVersion) {
  const envContent = fs.readFileSync(envFile, 'utf8');
  const updatedContent = envContent.replace(/VUE_APP_VERSION=(.*)/, `VUE_APP_VERSION=${newVersion}`);
  fs.writeFileSync(envFile, updatedContent, 'utf8');

  let packageData = getPackageJson()
  packageData.version = newVersion
  fs.writeFile('./package.json', JSON.stringify(packageData, null, '\t'), err => {
    if (err) {
      console.log('写入失败', err)
    } else {
      console.log('写入成功 ' + packageData.version)
    }
  })
}

npm run build 打包生产环境命令

npm run build:dev 打包开发环境命令

总结

执行打包命令会自动更新版本号,执行npm run build:dev更改的地方有.env.development文件中的VUE_APP_VERSION和package.json文件中的version,执行npm run build更改的地方有.env.production文件中的VUE_APP_VERSION和package.json文件中的version

### Vue 项目中区分生产环境开发环境进行打包 #### 配置 `vue.config.js` 或者 `vite.config.ts` 为了实现生产开发环境的自动识别与切换,在构建工具配置文件中设置不同的环境变量是一个常见做法。对于基于 Webpack 的 Vue CLI 项目,可以在 `vue.config.js` 中定义环境特定的配置项;而对于采用 Vite 构建系统的项目,则应在 `vite.config.ts` 文件里完成相应设定。 在 Vue CLI 项目中的 `vue.config.js` 可以通过如下方式来处理: ```javascript module.exports = { devServer: { proxy: 'http://localhost:8080' // 开发服务器代理设置 }, configureWebpack: config => { if (process.env.NODE_ENV === 'production') { // 修改生产模式下的配置 Object.assign(config.resolve.alias, { '@': path.resolve(__dirname, './src') }) } else { // 修改其他模式(如开发)下的配置 } } } ``` 而在 Vite 项目里的 `vite.config.ts` 则可以这样写: ```typescript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig(({ command }) => ({ plugins: [vue()], server: { port: 3000, open: true, proxy: { '/api': { target: process.env.DEV_API_SERVER || 'http://localhost:8080', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } }, build: { rollupOptions: { output: { entryFileNames: `[name].${command}.js`, chunkFileNames: `[name]-[hash].${command}.js`, assetFileNames: `[name].[ext]?id=[hash]` } } } })) ``` 上述代码片段展示了如何根据不同命令(`serve` or `build`)调整输出路径名称[^1][^2]。 #### 使用 `.env` 文件管理环境变量 除了修改构建配置外,还可以利用`.env`系列文件(.env,.env.development,.env.production等),这些文件允许开发者轻松地为不同运行阶段指定独特的参数而不必硬编码到源码之中。例如: - .env.development: ```plaintext NODE_ENV=development API_URL=http://local.api.com/ ``` - .env.production ```plaintext NODE_ENV=production API_URL=https://real.api.com/ ``` 当执行 `npm run serve` 启动本地服务时会读取 `.env.development`; 而调用 `npm run build` 进行正式版编译则依据 `.env.production` 设置[^3]. #### 自定义脚本支持多环境部署 最后一步是在项目的根目录下找到 `package.json`, 并在此处添加自定义 NPM 命令以便于针对各个目标平台分别创建优化后的资源包。这通常涉及到向 `"scripts"` 字段追加额外条目,比如下面的例子所示: ```json { "scripts": { "serve": "vue-cli-service serve", "build:dev": "vue-cli-service build --mode development", "build:test": "vue-cli-service build --mode test", "build:prod": "vue-cli-service build --mode production" } } ``` 如此一来便可以通过简单的命令行指令快速切换至所需的工作流并生成适配当前上下文的应用版本[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值