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),安装上即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MegaTTS3: 下一代高效语音合成技术,重塑AI语音的自然与个性化

在近期的发布中&#xff0c;浙江大学赵洲教授团队与字节跳动联合推出了革命性的第三代语音合成模型——MegaTTS3&#xff0c;该模型不仅在多个专业评测中展现了卓越的性能&#xff0c;还为AI语音的自然性和个性化开辟了新的篇章。 MegaTTS3技术亮点 零样本语音合成 MegaTTS3采用…

【教程】PyTorch多机多卡分布式训练的参数说明 | 附通用启动脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 torchrun 一、什么是 torchrun 二、torchrun 的核心参数讲解 三、torchrun 会自动设置的环境变量 四、torchrun 启动过程举例 机器 A&#…

计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪

1. 概述 目标检测&#xff08;Object Detection&#xff09;和目标追踪&#xff08;Object Tracking&#xff09;是计算机视觉中的两个关键技术&#xff0c;它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象&#xff0…

MySQL——流程控制

一、IF条件语句 语法 IF condition THENstatements; ELSEIF condition THENstatements; ELSEstatements; END IF; 判断成绩等级 # 判断成绩等级 # 输入学生的编号,取出学生的第一门课&#xff0c;然后判断当前的课程的等级 drop procedure if exists p2; delimiter $$ crea…

C# + Python混合开发实战:优势互补构建高效应用

文章目录 前言&#x1f94f;一、典型应用场景1. 桌面应用智能化2. 服务端性能优化3. 自动化运维工具 二、四大技术实现方案方案1&#xff1a;进程调用&#xff08;推荐指数&#xff1a;★★★★☆&#xff09;方案2&#xff1a;嵌入Python解释器&#xff08;推荐指数&#xff1…

MLflow 入门

官方主页 MLflow | MLflow官方文档 MLflow: A Tool for Managing the Machine Learning Lifecycle | MLflow 0. 简介 MLflow 是一个开源平台&#xff0c;专门为了帮助机器学习的从业者和团队处理机器学习过程中的复杂性而设计。MLflow 关注机器学习项目的完整生命周期&#x…

【蓝桥杯选拔赛真题101】Scratch吐丝的蜘蛛 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch吐丝的蜘蛛 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch吐丝的蜘蛛 第十五届青少年蓝桥杯s…

智谱最新模型GLM4是如何练成的

写在前面 这篇博客将基于《ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools》,深入剖析 GLM-4 系列在**模型架构设计、预训练、后训练(对齐)、以及关键技术创新(如长上下文处理、Agent 能力构建)**等环节的实现逻辑与设计考量,带你全面了…

第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

重要信息 2025年4月25-27日 中国广州 官网: http://www.icetae.com/ 部分 征稿主题 Track 1&#xff1a;电气工程 输配电、电磁兼容、高电压和绝缘技术、电气工程、电气测量、电力电子及其应用、机电一体化、电路与系统、电能质量和电磁兼容性、电力系统及其自…

设备调试--反思与总结

最近回顾项目&#xff0c; 发现&#xff1a;在调试过程中最耽误时间的可能不是技术难度&#xff0c;而是惯性思维&#xff1b; 例如&#xff1a; 我写can通信滤波器的时候&#xff0c;可能是不过滤的&#xff1b;是接收所有的id报文&#xff0c;然后用业务逻辑过滤&#xff08…

C++项目:高并发内存池_下

目录 8. thread cache回收内存 9. central cache回收内存 10. page cache回收内存 11. 大于256KB的内存申请和释放 11.1 申请 11.2 释放 12. 使用定长内存池脱离使用new 13. 释放对象时优化成不传对象大小 14. 多线程环境下对比malloc测试 15. 调试和复杂问题的调试技…

深度学习入门:神经网络的学习

目录 1 从数据中学习1.1 数据驱动1.2 训练数据和测试数据 2损失函数2.1 均方误差2.2 交叉熵误差2.3 mini-batch学习2.4 mini-batch版交叉熵误差的实现2.5 为何要设定损失函数 3 数值微分3.1 数值微分3.3 偏导数 4 梯度4.1 梯度法4.2 神经网络的梯度 5 学习算法的实现5.1 2层神经…

【第45节】windows程序的其他反调试手段上篇

目录 引言 一、通过窗口类名和窗口名判断 二、检测调试器进程 三、父进程是否是Explorer 四、RDTSC/GetTickCount时间敏感程序段 五、StartupInfo结构的使用 六、使用BeingDebugged字段 七、 PEB.NtGlobalFlag,Heap.HeapFlags,Heap.ForceFlags 八、DebugPort:CheckRem…

Golang|select

文章目录 多路监听超时控制 多路监听 如果selcet外面没有for循环&#xff0c;则只会监听一次&#xff0c;要实现一直监听的话要加for循环但是如果要设置退出条件的话&#xff0c;break语句只会退出这个select而不会退出for循环 select也可以有default&#xff0c;用于不用等cha…

无人机的群体协同与集群控制技术要点!

一、技术要点 通信技术 高效可靠的通信链路&#xff1a;无人机集群需要稳定、低延迟的通信网络&#xff0c;以实现实时数据传输和指令交互。通信方式包括无线自组织网络&#xff08;Ad Hoc&#xff09;、蜂窝网络、卫星通信等&#xff0c;需根据任务场景选择合适的通信技术。…

新手小白如何给个人电脑安装Deepseek?

准备工作&#xff1a;Ollama安装包、Chatbox安装包 一、安装Ollama 官网下载&#xff1a; 在 Windows 上下载 Ollama&#xff1a;https://ollama.com/download/windows 下载较慢&#xff0c;大家可以自行搜索资源下载&#xff0c;直接双击安装即可。 安装完毕后&#xff0c;…

Redis之RedLock算法以及底层原理

自研redis分布式锁存在的问题以及面试切入点 lock加锁关键逻辑 unlock解锁的关键逻辑 使用Redis的分布式锁 之前手写的redis分布式锁有什么缺点&#xff1f;&#xff1f; Redis之父的RedLock算法 Redis也提供了Redlock算法&#xff0c;用来实现基于多个实例的分布式锁。…

【控制学】控制学分类

【控制学】控制学分类 文章目录 [TOC](文章目录) 前言一、工程控制论1. 经典控制理论2. 现代控制理论 二、生物控制论三、经济控制论总结 前言 控制学是物理、数学与工程的桥梁 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、工程控制论 1. 经典…

Android 15 中 ApnPreferenceController 的 onStart 和 onStop 调用失效

背景 AOSP对APN入口(Access Point Name)实现中,overried了 onStart 和 onStop ,但实际执行中根本不会进入这两个接口的逻辑。 Q:MobileNetworkSettings (APN入口Preference所在的界面Fragement承载,TAG是NetworkSettings)的生命周期和ApnPreference 有什么关系? Not…

React 在组件间共享状态

在组件间共享状态 有时候&#xff0c;你希望两个组件的状态始终同步更改。要实现这一点&#xff0c;可以将相关 state 从这两个组件上移除&#xff0c;并把 state 放到它们的公共父级&#xff0c;再通过 props 将 state 传递给这两个组件。这被称为“状态提升”&#xff0c;这…