diff --git a/.github/workflows/playwright.yaml b/.github/workflows/playwright.yaml index 17dc768..faa1c73 100644 --- a/.github/workflows/playwright.yaml +++ b/.github/workflows/playwright.yaml @@ -19,13 +19,13 @@ jobs: env: VITE_BUILD_COMMIT: ${{ github.sha }} - name: 计算构建大小 - working-directory: dist run: | - set -x - du -sk . | cut -f1 # 以千字节(KB)为单位 - du -sm . | cut -f1 # 以兆字节(MB)为单位 - du -s --si . | cut -f1 # 使用SI单位(基于1000而非1024) - du -sh . | cut -f1 # 以人类可读的方式 + echo "📊 构建大小统计:" + echo "----------------------------------------" + echo "🔹 人类可读格式: $(du -sh dist | cut -f1)" + echo "🔹 以MB为单位: $(du -sm dist | cut -f1) MB" + echo "🔹 文件总数: $(find dist -type f | wc -l) 个文件" + echo "----------------------------------------" - name: 部署到 Surge id: surge_deploy if: ${{ github.actor != 'nektos/act' }} # https://nektosact.com/usage/index.html#skipping-steps diff --git a/package.json b/package.json index 4d0cf69..d2f2b6f 100644 --- a/package.json +++ b/package.json @@ -127,6 +127,7 @@ "vite": "^6.1.0", "vite-plugin-cdn-import": "^1.0.1", "vite-plugin-fake-server": "^2.2.0", + "vite-plugin-purgecss-updated-v5": "^1.2.4", "vite-plugin-singlefile": "^2.2.0", "vite-plugin-static-copy": "^2.3.0", "vite-plugin-vue-devtools": "^7.7.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a5c12da..1392a8c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -272,6 +272,9 @@ importers: vite-plugin-fake-server: specifier: ^2.2.0 version: 2.2.0 + vite-plugin-purgecss-updated-v5: + specifier: ^1.2.4 + version: 1.2.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.83.4)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)) vite-plugin-singlefile: specifier: ^2.2.0 version: 2.2.0(rollup@4.30.1)(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.83.4)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)) @@ -2432,6 +2435,10 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -3236,6 +3243,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3561,6 +3573,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true @@ -3775,6 +3791,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3873,6 +3893,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4237,6 +4261,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} @@ -4411,6 +4439,10 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + purgecss@7.0.2: + resolution: {integrity: sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==} + hasBin: true + qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} @@ -5400,6 +5432,11 @@ packages: '@nuxt/kit': optional: true + vite-plugin-purgecss-updated-v5@1.2.4: + resolution: {integrity: sha512-Cvc+LSMu+qAoEWR7xTHl42kjCK11GHqLJLep7ywX9GF/CYRABhschBXo0J8xHD00zf83xR/scw9A7pPQ2D9C6w==} + peerDependencies: + vite: ^6.1.0 + vite-plugin-singlefile@2.2.0: resolution: {integrity: sha512-Ik1wXmJaGzeQtUeIV7JprDUqqy6DlLzXAY27Blei5peE4c9VJF+Kp9xWDJeuX0RJUZmFbIAuw1/RAh06A+Ql7w==} engines: {node: '>18.0.0'} @@ -8049,6 +8086,8 @@ snapshots: commander@10.0.1: {} + commander@12.1.0: {} + commander@13.1.0: {} commander@2.20.3: {} @@ -8939,6 +8978,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.1: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -9235,6 +9283,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + jiti@2.4.2: {} js-beautify@1.15.1: @@ -9446,6 +9498,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.0.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -9534,6 +9588,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -9878,6 +9936,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-to-regexp@1.9.0: dependencies: isarray: 0.0.1 @@ -10035,6 +10098,13 @@ snapshots: punycode@2.3.1: {} + purgecss@7.0.2: + dependencies: + commander: 12.1.0 + glob: 11.0.1 + postcss: 8.5.1 + postcss-selector-parser: 6.1.2 + qs@6.5.3: {} queue-microtask@1.2.3: {} @@ -11140,6 +11210,11 @@ snapshots: - rollup - supports-color + vite-plugin-purgecss-updated-v5@1.2.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.83.4)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)): + dependencies: + purgecss: 7.0.2 + vite: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.83.4)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0) + vite-plugin-singlefile@2.2.0(rollup@4.30.1)(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(sass-embedded@1.83.4)(terser@5.38.2)(tsx@4.19.2)(yaml@2.7.0)): dependencies: micromatch: 4.0.8 diff --git a/vite.config.plugins.ts b/vite.config.plugins.ts index 415595d..7d91a61 100644 --- a/vite.config.plugins.ts +++ b/vite.config.plugins.ts @@ -25,6 +25,7 @@ import { createUtils4uAutoImports } from 'utils4u/auto-imports'; import { PluginOption } from 'vite'; import cdnImport from 'vite-plugin-cdn-import'; import { vitePluginFakeServer } from 'vite-plugin-fake-server'; +import pluginPurgeCss from 'vite-plugin-purgecss-updated-v5'; import { viteSingleFile } from 'vite-plugin-singlefile'; import { viteStaticCopy } from 'vite-plugin-static-copy'; import VueDevTools from 'vite-plugin-vue-devtools'; @@ -181,6 +182,11 @@ export function Plugins() { { dest: cesiumBaseUrl, src: `${cesiumSource}/Widgets` }, ], }), + + // https://github.com/rsnakdmx/vite-plugin-purgecss-v5?tab=readme-ov-file#-usage + pluginPurgeCss({ + variables: true, + }), ); const _unused = () => {