当前位置: 首页 > 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),安装上即可。

相关文章:

vue项目打包部署到maven仓库

需要的资源文件&#xff0c;都放在根目录下&#xff1a; 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 packa…...

【力扣】day1

文章目录 27.移除元素26. 删除有序数组的重复项 27.移除元素 26. 删除有序数组的重复项 我们仔细看一下这两道题的最后的返回值,为什么第一题返回slow 而第二题返回slow1 最后的返回值该如何返回绝对不是凭感觉,我们自己分析一下第一个slow,从0位置开始, 遇到val值就开始和fas…...

MySQL:B+树索引

InnoDB索引方案 为了使用二分法快速定位具体的目录项&#xff0c;假设所有目录项都可以在物理存储器上连续存储&#xff0c;有以下问题&#xff1a; InnoDB使用页为管理存储空间的基本单位&#xff0c;最多只能保证16KB的连续存储空间&#xff0c;记录数据量多可能需要非常大…...

如何建立可复用的项目管理模板

建立可复用的项目管理模板能够显著提高项目执行效率、减少重复劳动、确保项目管理标准化。在企业中&#xff0c;项目管理往往涉及多个步骤和多个团队&#xff0c;然而每次开始一个新项目时&#xff0c;如果都从头开始设计流程和文档&#xff0c;势必浪费大量的时间和精力。通过…...

Go:goroutine 和通道

goroutine f() // 等待 f() 返回 go f() // 新建一个调用 f() 的 goroutine&#xff0c;不用等待在 Go 语言里&#xff0c;goroutine 是并发执行的活动单元。与顺序执行程序不同&#xff0c;在有多个 goroutine 的并发程序中&#xff0c;不同函数可同时执行。程序启动时&…...

盛水最多的容器问题详解:双指针法与暴力法的对比与实现

文章目录 问题描述方法探讨方法一&#xff1a;暴力法&#xff08;Brute Force&#xff09;思路代码实现复杂度分析 方法二&#xff1a;双指针法&#xff08;Two Pointers&#xff09;思路正确性证明代码实现复杂度分析 方法对比总结 摘要 盛水最多的容器&#xff08;Container …...

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8 一.Rocky OS 下载1.官网 二.配置 Rocky1.创建新的虚拟机2.稍后安装系统3.选择系统模板4.设置名字和位置5.设置大小6.自定义硬件设置核心、运存和系统镜像7.完成 三.启动安装1.上下键直接选择安装2.回车安装3.设置分区&#xff08;默认…...

日常学习开发记录-slider组件

日常学习开发记录-slider组件 从零开始实现一个优雅的Slider滑块组件前言一、基础实现1. 组件结构设计2. 基础样式实现3. 基础交互实现 二、功能增强1. 添加拖动功能2. 支持范围选择3. 添加垂直模式 三、高级特性1. 键盘操作支持2. 禁用状态 五、使用示例六、总结 从零开始实现…...

AIDL 中如何传递 Parcelable 对象

目录 1. 直接在 AIDL 中定义 Parcelable 对象2. 自定义 Parcelable 对象的传递3. 以 Rect 类为例的 Parcelable 实现4. 注意安全性5. 小结1. 直接在 AIDL 中定义 Parcelable 对象 背景说明 从 Android 10(API 级别 29)开始,AIDL 允许直接在 .aidl 文件中定义 Parcelable 对…...

LVGL实战训练——计算器实现

目录 一、简介 二、部件知识 2.1 按钮矩阵部件(lv_btnmatrix) 2.1.1 按钮矩阵部件的组成 2.1.2 按钮文本设置 2.1.3 按钮索引 2.1.4 按钮宽度 2.1.5 按钮属性 2.1.6 按钮互斥 2.1.7 按钮文本重着色 2.1.8 按钮矩阵部件的事件 2.1.9 按钮矩阵部件的 API 函数 2.2…...

代码随想录算法训练营Day30

力扣452.用最少数量的箭引爆气球【medium】 力扣435.无重叠区间【medium】 力扣763.划分字母区间【medium】 力扣56.合并区间【medium】 一、力扣452.用最少数量的箭引爆气球【medium】 题目链接&#xff1a;力扣452.用最少数量的箭引爆气球 视频链接&#xff1a;代码随想录 题…...

AIDL 语言简介

目录 软件包类型注释导入AIDL 的后端AIDL 语言大致上基于 Java 语言。AIDL 文件不仅定义了接口本身,还会定义这个接口中用到的数据类型和常量。 软件包 每个 AIDL 文件都以一个可选软件包开头,该软件包与各个后端中的软件包名称相对应。软件包声明如下所示: package my.pac…...

经典算法 判断一个图中是否有环

判断一个图中是否有环 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图中是否存在环。存在输出YES&#xff0c;不存在输出NO。 输入样例1 6 8 5 3 …...

Transformer-PyTorch实战项目——文本分类

Transformer-PyTorch实战项目——文本分类 ———————————————————————————————————————————— 【前言】 这篇文章将带领大家使用Hugging Face里的模型进行微调&#xff0c;并运用在我们自己的新项目——文本分类中。需要大家提前下…...

Linux-服务器负载评估方法

在 Linux 服务器中&#xff0c;top 命令显示的 load average&#xff08;平均负载&#xff09;反映了系统在特定时间段内的负载情况。它通常显示为三个数值&#xff0c;分别代表过去 1 分钟、5 分钟和 15 分钟的平均负载。 1. 什么是 Load Average&#xff1f; Load average …...

Transformer编程题目,结合RTX 3060显卡性能和市场主流技术

以下是10道针对4年经验开发者的Transformer编程题目&#xff0c;结合RTX 3060显卡性能和市场主流技术&#xff0c;每题包含模型选择和实现逻辑描述&#xff1a; 题目1&#xff1a;医疗报告结构化提取 模型选择&#xff1a;BioBERT-base 要求&#xff1a; 开发从PDF医疗报告中提…...

Web三漏洞学习(其二:sql注入)

靶场&#xff1a;NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…...

VLAN的知识

1.什么是VLAN&#xff1f; VLAN是虚拟局域网&#xff0c;逻辑隔离广播域和网络区域 是一种通过将局域网内的设备逻辑地划分为一个个网络的技术 2.对比逻辑网络分割和物理网络分割&#xff1f; 逻辑网络分割是VLAN&#xff0c;隔离广播域和网络区域 物理网络分割是路由&…...

RFID 赋能部队智能物联网仓储建设:打造信息化高效解决方案

在当今军事现代化进程的宏大背景下&#xff0c;部队后勤保障工作无疑占据着举足轻重的地位&#xff0c;而仓储管理作为其中的核心环节&#xff0c;更是至关重要。传统的仓储管理模式在面对当下物资种类繁杂、数量庞大的现状时&#xff0c;已显得力不从心&#xff0c;效率低下、…...

结构型屏蔽在高频电子设备中的应用与优化

在当今高度电子化的时代&#xff0c;随着电子产品工作频率不断提高&#xff0c;设备内部温度上升&#xff0c;电磁环境日趋复杂&#xff0c;电磁兼容&#xff08;EMC&#xff09;问题成为设计和制造过程中必须重点解决的问题。EMC不仅关系到设备自身的稳定运行&#xff0c;更涉…...

【教程】Ubuntu修改ulimit -l为unlimited

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 问题描述 解决方法一 解决方法二 解决方法三 (终极) 问题描述 查系统资源限制 ulimit -l如果返回的是 64 或其他较小值&#xff0c;那么RDM…...

【HDFS】BlockPlacementPolicyRackFaultTolerant#getMaxNode方法的功能及具体实例

方法参数说明: numOfChosen:已经选择的节点数numOfReplicas:还需要选择的副本数方法的返回值是一个长度为2的数组:[调整后的要选出多少个节点(不包括已经选择的), 每个机架最大能选择的节点数] @Overrideprotected int[] getMaxNodesPerRack(int numOfChosen, int numOfR…...

水污染治理(生物膜+机器学习)

文章目录 **1. 水质监测与污染预测****2. 植物-微生物群落优化****3. 系统设计与运行调控****4. 维护与风险预警****5. 社区参与与政策模拟****挑战与解决思路****未来趋势** 前言&#xff1a; 将机器学习&#xff08;ML&#xff09;等人工智能技术融入植树生物膜系统&#xff…...

数模小白变大神的日记2025.4.15日

分工 1.论文:mathtype (Latex) 2.建模&#xff1b;相应的建模知识与撰写方法&#xff0c;写摘要 3.编程:matlab、SPSs、(Python) 评价模型 1. 层次分析法 ①层次分析法是一种多目标、多准则的决策问题 ②层次分析法是一种主观加权法 ③层次分析法通过以下步骤实现: 1.构…...

STM32提高篇: 以太网通讯

STM32提高篇: 以太网通讯 一.以太网通讯介绍二.W5500芯片介绍1.W5500芯片特点2.W5500应用目标3.接入框图 三.驱动移植四.tcp通讯五.udp通讯六.http_server 一.以太网通讯介绍 以太网&#xff08;Ethernet&#xff09;是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以…...

4-15记录(冒泡排序,快速选择排序)

算法稳定 简单选择排序的实质就是最后一个和第一个比较&#xff0c;小&#xff0c;就换位置&#xff0c;然后继续用最后一个数字和第二个比较&#xff0c;以此类推。 但是算法不稳定&#xff0c;本来下划线的2在后面&#xff0c;但是经过算法后去了前面 快速排序 实现过程&am…...

Ubuntu系统18.04更新驱动解决方法

原始是&#xff1a;ubuntu18.04里面的驱动是470&#xff0c;对应cuda11.4 现在需要更新为525&#xff0c;对应cuda为12.0 实现&#xff1a; 1、打开终端 Ctrl Alt T2、使用 lspci 命令&#xff08;快速查看显卡型号&#xff09; lspci | grep -i vga3、终端输入 ubuntu-d…...

Rocky Linux 9.x 基于 kubeadm部署k8s

搭建集群使用docker下载K8s&#xff0c;使用一主两从模式 主机名IP地址k8s- master192.168.1.141k8s- node-1192.168.1.142k8s- node-2192.168.1.143 一&#xff1a;准备工作 VMware Workstation Pro新建三台虚拟机Rocky Linux 9&#xff08;系统推荐最小化安装&#xff09; …...

MATLAB程序实现了一个物流配送优化系统,主要功能是通过遗传算法结合四种不同的配送策略,优化快递订单的配送方案

%% 主函数部分 % function main()clear; clc; close all;% 生成或加载算例 filename = D:\快递优化\LogisticsInstance.mat; if ~exist(filename, file)instance = generate_instance();save(filename, -struct, instance); elseinstance = load(filename); end% 遗传算法参数配…...

利用宝塔面板搭建RustDesk服务

一、介绍 1.1官网 https://rustdesk.com/ 1.2github仓库 https://github.com/rustdesk/rustdesk 1.3特点 RustDesk 支持多种操作系统&#xff0c;包括 Windows、macOS、Linux、Android 和 iOS。它甚至提供网页版客户端&#xff0c;可以在浏览器中直接使用。 用户可以通过…...

前端与Java后端交互出现跨域问题的14种解决方案

跨域问题是前端与后端分离开发中的常见挑战&#xff0c;以下是14种完整的解决方案&#xff1a; 1 前端解决方案( 开发环境代理) 1.1 Webpack开发服务器代理 // vue.config.js 或 webpack.config.js module.exports {devServer: {proxy: {/api: {target: http://localhost:8…...

PBKDF2全面指南(SpringBoot实现版)

文章目录 第一部分:PBKDF2基础概念1. 什么是PBKDF2?2. 为什么需要PBKDF2?3. PBKDF2的工作原理4. PBKDF2与其他密码散列函数的比较第二部分:在Java和SpringBoot中使用PBKDF21. Java内置的PBKDF2支持2. SpringBoot中集成PBKDF22.1 添加依赖2.2 配置PBKDF2密码编码器2.3 自定义…...

基于RV1126开发板的rknn-toolkit-lite使用方法

1. rknn-toolkit-lite介绍 rknn-toolkit-lite是用于python算法的推理的组件&#xff0c;当前已经在EASY-EAI-Nano完成适配&#xff0c;用户可以用它进行深度学习算法的纯python开发。而且同时支持已经进行了预编译的模型&#xff0c;短短几行代码即可完成算法的推理&#xff0c…...

一款轻量级的PHP地址发布页面源码

源码介绍 一款轻量级的PHP链接发布页面源码&#xff0c;适合快速搭建个性化的链接导航网站&#xff0c;支持动态链接管理和多种风格模板切换 1&#xff1a;后台登录地址为/admin/login.php&#xff0c;提供便捷的配置入口。 2&#xff1a;默认用户名是admin&#xff0c;密码为…...

分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同

在当今机器学习和大数据领域&#xff0c;分布式计算已成为解决大规模计算问题的关键技术。本文将深入探讨三种主流分布式计算框架——Ray、Kubeflow和Spark&#xff0c;分析它们各自的特点、应用场景以及如何结合它们的优势创建更强大的计算平台。 Spark批量清洗快&#xff0c;…...

【专题刷题】双指针(一)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;1&#xff0c;本人解法 本人屎山代码&#xff1b;2&#xff0c;优质解法 优质代码&#xff1b;3&#xff0c;精益求精&#xff0c;…...

火山引擎旗下防御有哪些

首先&#xff0c;我需要确认用户是不是打错了&#xff0c;比如把“引擎”当成了“云”&#xff0c;或者他们真的想了解火山引擎的防御机制。火山引擎是字节跳动旗下的云服务平台&#xff0c;类似于阿里云或腾讯云&#xff0c;所以用户可能想了解的是其安全防护措施。 接下来&am…...

python程序打包——nuitka使用

目前python打包成exe的工具主要有&#xff1a;PyInstaller Briefcase py2exe py2app Nuitka CX_Freeze等。 不同于C代码&#xff0c;可以直接编译成可执行的exe文件&#xff0c;或者js代码在浏览器中就能执行&#xff0c;python代码必须通过python解释器来运行&#xff0c…...

编写了一个专门供强化学习玩的贪吃蛇小游戏,可以作为后续学习的playgraound

文章目录 **试玩效果****项目背景****核心设计思路****代码亮点解析****与强化学习算法的对接示例****扩展方向****总结****完整代码**把训练一个会玩小游戏的智能体,作为学习强化学习的一个目标,真的是很有乐趣的一件事。我已经不知为此花费了多少日夜了。如今已是着魔了一般…...

chain_type=“stuff 是什么 ? 其他方式有什么?

chain_type="stuff 是什么 ? 其他方式有什么? 目录 chain_type="stuff 是什么 ? 其他方式有什么?1. `chain_type="stuff"`2. `chain_type="map_reduce"`3. `chain_type="refine"`4. `chain_type="map_rerank"`在 LangCh…...

在IDEA里面建立maven项目(便于java web使用)

具体步骤&#xff1a; 第一次有的电脑你再创建项目的时候右下角会提醒你弹窗&#xff1a;让你下载没有的东西 一定要下载&#xff01;&#xff01;可能会很慢 运行结果&#xff1a; 因为他是默认的8080端口所以在运行的时候输入的url如下图&#xff1a; 新建了一个controller代…...

MyBatis 详解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的 持久层框架&#xff0c;它通过 XML 或注解配置&#xff0c;将 Java 对象&#xff08;POJO&#xff09;与数据库操作&#xff08;SQL&#xff09;进行灵活映射&#xff0c;简化了 JDBC 的复杂操作。 核心思想&#xff1a;S…...

郑州工程技术学院党委书记甘勇一行莅临埃文科技调研交流

为深化产教融合、推动人工智能领域人才培养与产业需求精准对接&#xff0c;2025年4月9日下午&#xff0c;郑州工程技术学院党委书记甘勇、河南省人工智能产业创新发展联盟执行秘书长孟松涛等一行莅临埃文科技调研交流。 一、聚焦技术前沿 共话AI产业变革 座谈会上&#xff0c;…...

AI应用开发之扣子第一课-夸夸机器人

首先&#xff0c;进入官网&#xff1a;点击跳转至扣子。 1.创建智能体 登录进网站后&#xff0c;点击左上角&#xff0b;图标&#xff0c;创建智能体&#xff0c;输入智能体名称、功能介绍 2.输入智能体提示词 在“人设与回复逻辑”输入以下内容&#xff1a; # 角色 你是一…...

Node.js 数据库 CRUD 项目示例

希望使用Nodejs操作数据库做CRUD&#xff0c;用deepseek实战搜索“使用Nodejs对数据库表做CRUD的项目例子”&#xff0c;找到了解决方案&#xff0c;如下图所示&#xff1a; 项目结构 nodejs-crud-example/ ├── config/ │ └── db.js # 数据库连接配置 ├──…...

ESP8266/32作为AVR编程器(ISP programmer)的使用介绍

ESP8266作为AVR编程器( ISP programmer)的使用介绍 &#x1f33f;ESP8266自带库例程&#xff1a;https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266AVRISP&#x1f4cd;支持ESP8266/32的ESP_AVRISP其它开源工程&#xff08;个人没有再去验证&#xff09;&…...

union all几个常见问题及其解决方案

UNION ALL 是 SQL 中用于合并两个或多个 SELECT 语句结果集的操作符。与 UNION 不同&#xff0c;UNION ALL 不会去除重复的记录&#xff0c;它简单地将一个查询的结果附加到另一个查询的结果之后。尽管 UNION ALL 相对来说更高效&#xff08;因为它不需要检查重复项&#xff09…...

21.C++11

1.列表初始化 1.1C11中的{} •C11以后想统⼀初始化⽅式&#xff0c;试图实现⼀切对象皆可⽤{}初始化&#xff0c;{}初始化也叫做列表初始化。 • 内置类型⽀持&#xff0c;⾃定义类型也⽀持&#xff0c;⾃定义类型本质是类型转换&#xff0c;中间会产⽣临时对象&#xff0c;最…...

【交叉编译】目标机编译安装对应依赖库总结

1、解压目标机交叉编译工具链 # 创建工具链存放目录&#xff08;可选&#xff09; sudo mkdir -p /opt/toolchain# 解压到目标路径&#xff08;示例路径&#xff1a;/opt/toolchain&#xff09; sudo tar -xzvf 目标主机编译工具链.tar.gz -C /opt/toolchain# 查看解压后的目录…...

Docker华为云创建私人镜像仓库

Docker华为云创建私人镜像仓库 在华为云官网的 产品 中搜索 容器镜像服务 &#xff1a; 或者在其他页面的搜索栏中搜索 容器镜像服务 &#xff1a; 进入到页面后&#xff0c;点击 创建组织 &#xff08;华为云的镜像仓库称为组织&#xff09;&#xff1a; 设置组织名字后&…...