From 2daa1b9879d08ada7a8b5b8208e4b2e53e821467 Mon Sep 17 00:00:00 2001 From: cdn0x12 Date: Mon, 3 Feb 2025 11:39:40 +0800 Subject: [PATCH] fix: include data directory during building --- package.json | 2 ++ pnpm-lock.yaml | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ vite.config.ts | 32 ++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b090947..a13bd87 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "devDependencies": { "@eslint/js": "^9.19.0", "@tailwindcss/typography": "^0.5.16", + "@types/fs-extra": "^11.0.4", "@types/glob": "^8.1.0", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", @@ -34,6 +35,7 @@ "eslint": "^9.19.0", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.18", + "fs-extra": "^11.3.0", "glob": "^11.0.1", "globals": "^15.14.0", "postcss": "^8.5.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7923a1..891cac5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,9 @@ importers: '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@3.4.17) + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 '@types/glob': specifier: ^8.1.0 version: 8.1.0 @@ -75,6 +78,9 @@ importers: eslint-plugin-react-refresh: specifier: ^0.4.18 version: 0.4.18(eslint@9.19.0(jiti@1.21.7)) + fs-extra: + specifier: ^11.3.0 + version: 11.3.0 glob: specifier: ^11.0.1 version: 11.0.1 @@ -781,12 +787,18 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -1141,6 +1153,10 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1185,6 +1201,9 @@ packages: resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1284,6 +1303,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1938,6 +1960,10 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + update-browserslist-db@1.1.2: resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -2586,6 +2612,11 @@ snapshots: '@types/estree@1.0.6': {} + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.13.0 + '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 @@ -2593,6 +2624,10 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 22.13.0 + '@types/minimatch@5.1.2': {} '@types/node@22.13.0': @@ -3077,6 +3112,12 @@ snapshots: fraction.js@4.3.7: {} + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fsevents@2.3.3: optional: true @@ -3120,6 +3161,8 @@ snapshots: globals@15.14.0: {} + graceful-fs@4.2.11: {} + graphemer@1.4.0: {} has-flag@4.0.0: {} @@ -3201,6 +3244,12 @@ snapshots: json5@2.2.3: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -3928,6 +3977,8 @@ snapshots: undici-types@6.20.0: {} + universalify@2.0.1: {} + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 diff --git a/vite.config.ts b/vite.config.ts index 381e84e..755f8de 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,10 +1,32 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import path from 'path'; +import { Plugin } from 'vite'; +import fs from 'fs-extra'; + +// 复制 data 目录 +function copyDataPlugin(): Plugin { + return { + name: 'copy-data', + async closeBundle() { + const source = path.resolve(__dirname, 'data'); + const destination = path.resolve(__dirname, 'dist/data'); + try { + await fs.copy(source, destination); + console.log('Copied data directory from ' + source + ' to ' + destination); + } catch (error) { + console.error('Error copying data directory:', error); + } + } + }; +} // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [ + react(), + copyDataPlugin() + ], optimizeDeps: { exclude: ['lucide-react'], }, @@ -13,4 +35,12 @@ export default defineConfig({ '@': path.resolve(__dirname, './'), }, }, + build: { + rollupOptions: { + input: { + main: path.resolve(__dirname, 'index.html'), + }, + }, + copyPublicDir: true, // 复制 public 目录 + }, });