From bff18a7be7670b4a0ab2cc15472749d0a294dc14 Mon Sep 17 00:00:00 2001 From: yoan <536464346@qq.com> Date: Wed, 23 Oct 2024 08:36:25 +0800 Subject: [PATCH] update vite plugin to preserve special file --- ui/package-lock.json | 62 ++++++++++++++++++++++++++++++++++++++++++++ ui/package.json | 2 ++ ui/vite.config.ts | 33 +++++++++++++++++++++-- 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/ui/package-lock.json b/ui/package-lock.json index 83cf4c95..c0516a33 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -48,6 +48,7 @@ "zod": "^3.23.8" }, "devDependencies": { + "@types/fs-extra": "^11.0.4", "@types/node": "^22.0.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", @@ -60,6 +61,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "fs-extra": "^11.2.0", "postcss": "^8.4.40", "prettier": "^3.3.3", "tailwindcss": "^3.4.7", @@ -2453,6 +2455,25 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmmirror.com/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.0.0", "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.0.0.tgz", @@ -3699,6 +3720,20 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3826,6 +3861,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", @@ -4130,6 +4171,18 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", @@ -5525,6 +5578,15 @@ "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", "dev": true }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", diff --git a/ui/package.json b/ui/package.json index 2b76cb88..4f1e92d1 100644 --- a/ui/package.json +++ b/ui/package.json @@ -50,6 +50,7 @@ "zod": "^3.23.8" }, "devDependencies": { + "@types/fs-extra": "^11.0.4", "@types/node": "^22.0.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", @@ -62,6 +63,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "fs-extra": "^11.2.0", "postcss": "^8.4.40", "prettier": "^3.3.3", "tailwindcss": "^3.4.7", diff --git a/ui/vite.config.ts b/ui/vite.config.ts index 2389dfc2..be526655 100644 --- a/ui/vite.config.ts +++ b/ui/vite.config.ts @@ -1,9 +1,38 @@ import path from "path"; import react from "@vitejs/plugin-react"; -import { defineConfig } from "vite"; +import { defineConfig, Plugin } from "vite"; + +import fs from "fs-extra"; + +const preserveFilesPlugin = (filesToPreserve: string[]): Plugin => { + return { + name: "preserve-files", + apply: "build", + buildStart() { + // 在构建开始时将要保留的文件或目录移动到临时位置 + filesToPreserve.forEach((file) => { + const srcPath = path.resolve(__dirname, file); + const tempPath = path.resolve(__dirname, `temp_${file}`); + if (fs.existsSync(srcPath)) { + fs.moveSync(srcPath, tempPath, { overwrite: true }); + } + }); + }, + closeBundle() { + // 在构建完成后将临时位置的文件或目录移回原来的位置 + filesToPreserve.forEach((file) => { + const srcPath = path.resolve(__dirname, file); + const tempPath = path.resolve(__dirname, `temp_${file}`); + if (fs.existsSync(tempPath)) { + fs.moveSync(tempPath, srcPath, { overwrite: true }); + } + }); + }, + }; +}; export default defineConfig({ - plugins: [react()], + plugins: [react(), preserveFilesPlugin(["dist/.gitkeep"])], resolve: { alias: { "@": path.resolve(__dirname, "./src"),