当前位置: 首页 > news >正文

vue项目打包部署到maven仓库

需要的资源文件,都放在根目录下:

1. versionInfo.js

const fs = require('fs')
const path = require('path')
const mkdirp = require('mkdirp')
const spawn = require('child_process').spawnconst packageObj = require('./package.json')
const versionNo = packageObj.version
const projectName = packageObj.nameconst outputPath = 'dist/public'
const gitCommitId = spawn('git', ['rev-parse', 'HEAD']) // 获取commitId
function delDir (path) {let files = []if (fs.existsSync(path)) {files = fs.readdirSync(path)files.forEach((file) => {const curPath = path + '/' + fileif (fs.statSync(curPath).isDirectory()) {delDir(curPath) // 递归删除文件夹} else {fs.unlinkSync(curPath) // 删除文件}})fs.rmdirSync(path)}
}
delDir(outputPath)
mkdirp.sync(outputPath)const versionInfo = fs.createWriteStream(path.join(outputPath, 'version.txt'), 'utf-8')
const nowDate = new Date()
const nYear = nowDate.getFullYear()
let nMonth = nowDate.getMonth() + 1
nMonth < 10 && (nMonth = `0${nMonth}`)
let nDay = nowDate.getDate()
nDay < 10 && (nDay = `0${nDay}`)
const dateString = `${nYear}${nMonth}${nDay}`// 读取git当前的commitId
gitCommitId.stdout.on('data', function (data) {versionInfo.write(`version = V${versionNo}_${dateString}_${data.toString().substring(0, 10)}\r\n`)versionInfo.write(`projectName = ${projectName}\r\n`)versionInfo.write(`git commit id = ${data}\r\n`)console.log('版本文件生成成功')
})
gitCommitId.stderr.on('data', function (error) {versionInfo.write(`${error}\n`)versionInfo.end()console.error('版本文件生成失败')
})

2. gitInfo.js

const fs = require('fs')
const path = require('path')
const mkdirp = require('mkdirp')
const spawn = require('child_process').spawn
const outputPath = 'dist/public/static'
const gitCommitId = spawn('git', ['rev-parse', 'HEAD']) // 获取commitId
const gitStatus = spawn('git', ['status', '-s']) // 获取文件变动信息
mkdirp.sync(outputPath)
const gitInfo = fs.createWriteStream(path.join(outputPath, 'gitInfo.txt'), 'utf-8')
// 读取git当前的commitId
gitCommitId.stdout.on('data', function (data) {gitInfo.write(`Git's commitId: ${data}\n`)gitStatus.stdout.on('data', function (data) {gitInfo.write(`Files' status:\n${data}`)gitInfo.end()})
})
gitCommitId.stderr.on('data', function (error) {gitInfo.write(`${error}\n`)gitInfo.end()
})
gitStatus.stderr.on('data', function (error) {gitInfo.write(`${error}\n`)gitInfo.end()
})

3. compress.js


const exec = require('child_process').execconst packageName = require('./package.json').name || 'dist'const nowDate = new Date()
const nYear = nowDate.getFullYear()
let nMonth = nowDate.getMonth() + 1
nMonth < 10 && (nMonth = `0${nMonth}`)
let nDay = nowDate.getDate()
nDay < 10 && (nDay = `0${nDay}`)
let hourStr = nowDate.getHours()
hourStr < 10 && (hourStr = `0${hourStr}`)
let minuteStr = nowDate.getMinutes()
minuteStr < 10 && (minuteStr = `0${minuteStr}`)
let secondStr = nowDate.getSeconds()
secondStr < 10 && (secondStr = `0${secondStr}`)
const dateString = `${nYear}${nMonth}${nDay}${hourStr}${minuteStr}${secondStr}`
console.log('开始压缩生成jar包...')
const cmd = `node gitInfo.js && jar -cvf ${packageName}-${dateString}.jar -C dist/ .`
exec(cmd, function (error, stdout, stderr) {// console.log(stdout)if (error) {console.error(error)} else {console.log(`打包成功,生成${packageName}-${dateString}.jar`)}
})

4. pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hzcominfo.sinopec</groupId><artifactId>order-bonus-front</artifactId><packaging>jar</packaging><version>1.0.0-SNAPSHOT</version>
</project>

5. deployJarToMaven.js


const exec = require('child_process').exec
const packageName = require('./package.json').name || 'dist'
const packageVersion = require('./package.json').version || ''const nowDate = new Date()
const nYear = nowDate.getFullYear()
let nMonth = nowDate.getMonth() + 1
nMonth < 10 && (nMonth = `0${nMonth}`)
let nDay = nowDate.getDate()
nDay < 10 && (nDay = `0${nDay}`)
let hourStr = nowDate.getHours()
hourStr < 10 && (hourStr = `0${hourStr}`)
let minuteStr = nowDate.getMinutes()
minuteStr < 10 && (minuteStr = `0${minuteStr}`)
let secondStr = nowDate.getSeconds()
secondStr < 10 && (secondStr = `0${secondStr}`)
const dateString = `${nYear}${nMonth}${nDay}${hourStr}${minuteStr}${secondStr}`
console.log('开始压缩生成jar包...')
const targetFileName = `${packageName}-${dateString}.jar`
const cmd = `node gitInfo.js && jar -cvf ${targetFileName} -C dist/ .`
exec(cmd, function (error, stdout, stderr) {if (error) {console.error(error)} else {console.log(`打包成功,生成${packageName}-${dateString}.jar`)const xml2js = require('xml2js')const fs = require('fs')const MAVEN_REP_URL = 'http://10.183.188.124:8081/nexus/content/repositories/snapshots/'const MAVEN_REPOSITORY_ID = 'bp-snapshot'const POM_FILE_NAME = 'pom.xml'fs.readFile('pom.xml', 'utf-8', (err, data) => {if (err) {throw err}// convert XML data to JSON objectxml2js.parseString(data, (err, result) => {if (err) {throw err}console.log(result.project)result.project.artifactId = packageNameresult.project.version = packageVersion + '-SNAPSHOT'// convert JSON objec to XMLconst builder = new xml2js.Builder()const xml = builder.buildObject(result)// write updated XML string to a filefs.writeFile('pom.xml', xml, (err) => {if (err) {throw err}console.log('开始部署...')const mavenCmd = `mvn deploy:deploy-file -Dfile=${targetFileName} -Durl=${MAVEN_REP_URL}   -DrepositoryId=${MAVEN_REPOSITORY_ID} -DpomFile=${POM_FILE_NAME}`exec(mavenCmd, function (error, stdout, stderr) {console.log(stdout)if (error) {console.error(error)} else {console.log(`部署成功,当前版本${result.project.version}`)}})})})})}
})

6. package.json中的打包、上传maven指令

"build": "node versionInfo.js && vue-cli-service build --no-clean && node compress.js",
"build:deploy": "node versionInfo.js && vue-cli-service build --no-clean && node deployJarToMaven.js",

说明:在运行打包、上传指令时,会报缺少三方依赖的错(如xml2js、mkdirp),安装上即可。

相关文章:

  • 如何针对游戏、金融行业定制CC攻击防护规则?
  • 如何配置环境变量HADOOP_HOMEM、AVEN_HOME?不配置会怎么样
  • RCEP框架下eBay日本站选品战略重构:五维解析关税红利机遇
  • java使用 ​Stream 流对自定义对象数组去重的
  • 欧拉服务器操作系统安装MySQL
  • Ollama、vLLM、LMDeploy选型指南
  • 什么是ETF跟踪误差?场内基金佣金最低是多少?
  • 批量将不同位置的多个文件复制到一个文件夹
  • Oracle查询大表的全部数据
  • JDBC 初认识、速了解
  • 谷云科技iPaaS集成平台4月发布新版本V7.4
  • 谷歌发布统一安全平台:让企业安全防护更简单
  • Spring如何解决项目中的循环依赖问题?
  • AI日报 - 2025年04月16日
  • 10 穴 汽车连接器的15个设计特点
  • 【AGI】MCP生态的“飞轮效应”
  • [随笔杂谈] 计算机编程 —— 通用学习等级体系
  • 数据库—函数笔记
  • 智慧声防:构筑海滨浴场安全屏障的应急广播系
  • 设计和实现一个基于 DDS(直接数字频率合成) 的波形发生器
  • 杨靖︱“一笔糊涂账”:博马舍与美国革命
  • 韩国检方以受贿嫌疑起诉前总统文在寅
  • 驯服象牙塔:美国政府对大学的战争是一场善恶对抗吗
  • 2025欧亚经济合作发展论坛在沪举办
  • 我国已顺利实施20次航天员出舱活动,达到国际先进水平
  • 美国务卿宣布将对美国务院进行全面重组