vue/react前端项目打包的时候加上时间,防止后端扯皮

ops/2025/3/15 22:19:03/

前端项目(Vue/React)打包时,将打包时间注入到项目中,可以有效防止前后端扯皮,尤其是在部署和调试时能够明确知道当前运行的代码版本和打包时间。以下是实现方案

在index.html中加入时间模板:

<div style="display: none">PUBLISHTIME</div>

安装一个文件管理依赖:

pnpm install fs-extra -D

然后新建一个script文件夹用于存储编译脚本,并存储编译脚本:

将里面的buildCmd替换为自己的命令

const fs = require('fs-extra')
const path = require('path')
const { exec } = require('child_process')const buildCmd = 'pnpm run test'const updateDeployTime = () => {const indexHtml = path.join(__dirname, '../index.html')let content = fs.readFileSync(indexHtml, 'utf-8')if (content.includes(`PUBLISHTIME`)) {var currentTime = new Date()// 提取年、月、日、时、分、秒var year = currentTime.getFullYear() // 年var month = String(currentTime.getMonth() + 1).padStart(2, '0')var day = String(currentTime.getDate()).padStart(2, '0') // 日var hours = String(currentTime.getHours()).padStart(2, '0') // 时var minutes = String(currentTime.getMinutes()).padStart(2, '0') // 分var seconds = String(currentTime.getSeconds()).padStart(2, '0') // 秒// 拼接成 YYYY-MM-DD HH:mm:ss 格式var formattedTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`console.log('currentTime', formattedTime)content = content.replace('PUBLISHTIME', `build time: ${formattedTime}`)fs.writeFileSync(indexHtml, content)console.log(`Updated time in: ${indexHtml}`)}
}const deleteDistFolder = () => {const distFolder = path.join(__dirname, '../dist')if (fs.existsSync(distFolder)) {fs.remove(distFolder)console.log(`Deleted folder: ${distFolder}`)} else {console.log(`Folder does not exist: ${distFolder}`)}
}const testBuild = () => {// Step 1: Run the build commandconsole.log('Starting build process...')exec(buildCmd + ' && git restore .', (error, stdout, stderr) => {if (error) {console.error(`Build error: ${error.message}`)return}if (stderr) {console.error(`Build stderr: ${stderr}`)}console.log(`Build stdout: ${stdout}`)console.log('Build process complete.')})
}// 从命令行获取新服务的名称
exec('git add .', (error, stdout, stderr) => {// del dist folderdeleteDistFolder()// update build timeupdateDeployTime()// run build test commandtestBuild()// upload dist folder to server
})

然后在package.json里面添加编译命令:

"pub:test": "node scripts/test.cjs",
"pub:prod": "node scripts/prod.cjs"


http://www.ppmy.cn/ops/166051.html

相关文章

双 Token 无感刷新机制在前后端分离架构中实现

在前后端分离的架构中&#xff0c;双 Token 无感刷新是一种常见的身份验证机制&#xff0c;用于在 Access Token 过期时&#xff0c;通过 Refresh Token 自动获取新的 Access Token&#xff0c;从而避免用户频繁登录。 1. 双 Token 无感刷新的核心流程 1.1 核心流程 用户登录&…

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)

大模型学习笔记------Llama 3模型架构之旋转编码&#xff08;RoPE&#xff09; 1、位置编码简介1.1 绝对位置编码1.2 相对位置编码 2、旋转编码&#xff08;RoPE&#xff09;2.1 基本概念---旋转矩阵2.2 RoPE计算原理2.2.1 绝对位置编码2.2.2 相对位置编码 3、旋转编码&#xf…

从网络通信探究分布式通信的原理

分布式通信是分布式系统中不同节点之间进行数据交换的关键机制&#xff0c;而它的底层本质就是网络通信。因此&#xff0c;我们可以从网络通信的基本原理出发&#xff0c;逐步探究分布式通信的核心概念和技术。 一、网络通信基础 网络通信本质上是不同设备之间的数据交换&…

【QT】-一文说清楚QT定时器怎么用

在 Qt 中&#xff0c;定时器&#xff08;QTimer&#xff09;是用来定时执行某些任务的非常有用的类。它可以帮助你在指定的时间间隔后重复执行某个函数。常见的用法是启动一个定时器&#xff0c;每过一段时间自动执行某个操作&#xff0c;比如更新 UI、检查状态或发送数据等。 …

Linux 命名管道

文章目录 &#x1f680; 深入理解命名管道&#xff08;FIFO&#xff09;及其C实现一、命名管道核心特性1.1 &#x1f9e9; 基本概念 二、&#x1f4bb; 代码实现解析2.1 &#x1f4c1; 公共头文件&#xff08;common.hpp&#xff09;2.2 &#x1f5a5;️ 服务器端&#xff08;s…

Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用&#xff1a;避免空指针异常2.3 为什么要用&#xff1f;2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明&#xff1a; orElse 如何使用orElseGet 如何使用两者的…

Python 与 JavaScript 交互及 Web 逆向分析全解析

一、引言 在当今数字化时代,软件开发的复杂性和多样性不断增加,不同编程语言之间的交互与协作变得愈发重要。Python 凭借其简洁易读的语法、丰富的库和强大的数据处理能力,在数据科学、自动化脚本编写等领域占据着重要地位。而 JavaScript 作为前端开发的核心语言,以其在网…

CentOS7 服务器安装 Hadoop 和 Hive

CentOS 服务器安装 Hadoop 和 Hive流程 请将以下的路径更换为自己的路径 1. 环境准备 1.1 安装 JDK Hadoop 和 Hive 需要 Java 运行环境&#xff0c;这里安装 OpenJDK 1.8&#xff1a; # 查看 Java 版本 java -version1.2 创建 Hadoop 用户&#xff08;可选&#xff09; …