vue2、vue3打包版本号

一、前言

适用于正式生产打包时在dist目录下生成zip压缩包,并以版本号命名,每次打包自动叠加构建次数,同时可避免部分公司内的加密软件对前端文件加密。

二、适用编译环境

1.webpack 5.0x
2.基于webpack打包编译的,vue2、vue3
3.nodejs 16.x

vite环境中暂未实测,构建压缩插件 filemanager-webpack-plugin 替换成vite环境的压缩插件可以实现同等效果。
注:不保证其他环境可用,本文以下内容只供参考。

三、项目根目录添加 autoVersion.js 以及 .version.json 文件

在这里插入图片描述
autoVersion.js 文件里面是生成版本号逻辑


const path = require('path')
const fs = require('fs')


function getCurrentVersion(){
  const vers = fs.readFileSync('.version.json')
  if (vers){
    return JSON.parse(vers.toString('utf-8'))

  }
  return null
}

function createNewVersion(version){
  if (version){
    const vers = version.split('.')

    const num = parseInt(vers.pop()) + 1

    vers.push(num)

    return vers.join('.')

  }
}

function updateVersion(newVersion, data){
  data.version = newVersion

  const date = new Date()
  data.updateTime = [date.toLocaleDateString(),date.toLocaleTimeString()].join(' ')

  const newVersionData = JSON.stringify(data)
  fs.writeFileSync('.version.json', newVersionData)

  return data
}




module.exports = function (){

  const versionData = getCurrentVersion()
  if (process.env.NODE_ENV === 'development'){
    console.log(versionData);

    return  versionData
  }else {
    const newVersion = createNewVersion(versionData.version)

    const newVersionData = updateVersion(newVersion, versionData)
    console.log(newVersionData);
    return newVersionData
  }
}

.version.json 文件内容

{"version":"1.0.0.33","updateTime":"2023/3/9 18:56:33","name":"project name"}

三、安装filemanager-webpack-plugin

npm install filemanager-webpack-plugin -D

yarn add filemanager-webpack-plugin -D

四、vue.config.js 配置

1.引入 filemanager-webpack-pluginautoVersion.js
const FileManagerPlugin = require('filemanager-webpack-plugin')

const packdata = require('./autoVersion')()  // 注意引入后需要立即运行
2.配置chainwebpack

module.exports = {

//其他配置项忽略
chainwebpack:(config)=>{

if (process.env.NODE_ENV === 'production'){ // 只在生产时打包
            config
              .plugin('fileManager')
              .use(FileManagerPlugin)
              .tap((args) => [
                  {
                      events: {
                          onEnd: {
                              delete: [
                                  
                              ],
                              archive: [
                                  // 选择文件夹将之打包成xxx.zip并放在根目录
                                  {
                                      source: path.join(__dirname, `./dist`),
                                      destination: path.join(__dirname, `./dist/${packdata.name}-${packdata.version}.zip`),
                                  },
                              ],
                          },
                      },
                  },
              ])
        }
}


}

<think>嗯,用户问的是如何在Vue2打包文件时添加版本号。首先,我需要回忆一下Vue项目通常使用的打包工具。Vue2一般基于Vue CLI,而Vue CLI默认使用的是webpack作为构建工具。所以,问题就转化为如何在webpack配置中添加版本号打包后的文件名中。 接下来,用户的需求可能是为了解决浏览器缓存的问题。因为如果文件名不变,浏览器可能会缓存旧文件,导致用户看不到最新的版本。添加版本号或哈希值可以让文件名每次构建都不同,从而强制浏览器加载新文件。 那么,我需要考虑如何在webpack中配置输出文件的名称。通常,webpack的output配置里可以使用占位符,比如[hash]、[chunkhash]、[contenthash]等。这些哈希值会根据文件内容生成,确保内容变化时哈希值也会变化。不过,用户可能还提到版本号,也就是在文件名中加入项目的版本号,比如从package.json中读取version字段。 这时候,可能需要修改vue.config.js文件,这是Vue CLI项目中的配置文件。用户需要在该文件中通过configureWebpack或chainWebpack方法来自定义webpack配置。例如,在输出文件名中加入版本号或者时间戳。 另外,用户可能还希望版本号是手动指定的,或者自动从package.json中获取。这时候需要用到Node.js的fs模块来读取package.json的内容,或者使用process.env来注入环境变量中的版本号。 还可能有一些注意事项,比如开发环境和生产环境的配置是否需要区分,如何确保每次构建生成的版本号唯一,或者是否需要同时使用哈希和版本号。例如,可以同时使用版本号和contenthash,这样既能方便版本管理,又能根据内容更新缓存。 此外,使用时间戳也是一种方法,但可能不如版本号或哈希值规范。需要权衡哪种方式更适合用户的场景。 最后,可能需要提醒用户,修改配置后需要重新运行构建命令,比如npm run build,并且部署时要确保所有引用的文件路径正确更新,避免因为缓存导致的问题。 总结下来,步骤可能是:1. 修改vue.config.js,配置webpack的output文件名;2. 使用版本号或哈希值;3. 读取package.json的版本或环境变量;4. 测试构建结果,确保文件名正确包含版本信息。</think>在 Vue 2 项目中为打包文件添加版本号(或哈希值)是一种常见的缓存优化策略,可以有效解决浏览器缓存旧版本文件的问题。以下是几种常用方法: --- ### **方法 1:使用 Webpack 的哈希占位符** Vue CLI 基于 Webpack,可以直接通过文件名哈希配置实现: 1. **修改 `vue.config.js`**(没有则新建): ```javascript module.exports = { configureWebpack: { output: { filename: `[name].[contenthash:8].js`, chunkFilename: `[name].[contenthash:8].js` } } }; ``` 2. **效果**: - 打包后文件名会包含内容哈希(如 `app.d2b4e8a1.js`)。 - `contenthash` 会根据文件内容生成,内容不变哈希不变。 --- ### **方法 2:注入版本号(package.json 中的版本)** 将项目的 `package.json` 中的版本号注入文件名: 1. **读取版本号**: ```javascript const packageJson = require(&#39;./package.json&#39;); const version = packageJson.version; module.exports = { configureWebpack: { output: { filename: `[name].${version}.[hash:8].js`, chunkFilename: `[name].${version}.[hash:8].js` } } }; ``` 2. **效果**: - 文件名会包含版本号(如 `app.1.0.0.d2b4e8a1.js`)。 --- ### **方法 3:使用构建时间戳** 为每次构建生成唯一时间戳: 1. **在 `vue.config.js` 中添加时间戳**: ```javascript const timestamp = new Date().getTime(); module.exports = { configureWebpack: { output: { filename: `[name].${timestamp}.[hash:8].js`, chunkFilename: `[name].${timestamp}.[hash:8].js` } } }; ``` 2. **效果**: - 文件名包含构建时间(如 `app.1654321000000.d2b4e8a1.js`)。 --- ### **方法 4:结合环境变量** 通过环境变量动态设置版本号: 1. **修改 `vue.config.js`**: ```javascript const version = process.env.VUE_APP_VERSION || &#39;dev&#39;; module.exports = { configureWebpack: { output: { filename: `[name].${version}.[hash:8].js`, chunkFilename: `[name].${version}.[hash:8].js` } } }; ``` 2. **在 `.env` 文件中定义变量**: ```ini VUE_APP_VERSION=1.0.0 ``` --- ### **额外配置:CSS 文件名哈希** 若需为 CSS 文件添加哈希,在 `vue.config.js` 中添加: ```javascript module.exports = { css: { extract: { filename: `[name].[contenthash:8].css`, chunkFilename: `[name].[contenthash:8].css` } } }; ``` --- ### **验证结果** 运行 `npm run build` 后,检查 `dist/` 目录下的文件命名是否符合预期。 **优点**: - 避免浏览器缓存问题,确保用户获取最新代码。 - 方便版本追踪和回滚。 **注意事项**: - 若使用 CDN 或反向代理,需同步更新文件引用路径。 - 哈希过长可能影响调试,可调整 `:8` 缩短长度(如 `[hash:6]`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值