From d0661b9b8e21bcb4a210c70b40c327bb11269e9c Mon Sep 17 00:00:00 2001 From: wxhao Date: Fri, 31 Oct 2025 15:58:34 +0800 Subject: [PATCH] favicon --- .prettierrc.js | 4 +- assets/favicon.ico | Bin 0 -> 6930 bytes eslint.config.js | 4 +- package-lock.json | 455 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 + webpack.config.js | 17 +- 6 files changed, 472 insertions(+), 10 deletions(-) create mode 100644 assets/favicon.ico diff --git a/.prettierrc.js b/.prettierrc.js index 81d33ba..9d82e35 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -7,5 +7,5 @@ export default { useTabs: false, bracketSpacing: true, arrowParens: 'avoid', - jsxSingleQuote: false -}; \ No newline at end of file + jsxSingleQuote: false, +}; diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..182d34e568210ab7c3e9d7f41434dffa497a935f GIT binary patch literal 6930 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" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4932,6 +4951,13 @@ "multicast-dns": "^7.2.5" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -5081,6 +5107,17 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001752", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz", @@ -5180,6 +5217,19 @@ "node": ">=6.0" } }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -5354,6 +5404,30 @@ "dev": true, "license": "MIT" }, + "node_modules/copy-webpack-plugin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, "node_modules/core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", @@ -5455,6 +5529,36 @@ "node": ">=10" } }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -5708,6 +5812,86 @@ "node": ">=0.10.0" } }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -5759,6 +5943,16 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -6992,6 +7186,16 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -7054,6 +7258,91 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz", + "integrity": "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -8258,6 +8547,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -8285,6 +8581,16 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8530,6 +8836,17 @@ "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -8575,6 +8892,19 @@ "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8828,6 +9158,17 @@ "node": ">=6" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8868,6 +9209,17 @@ "node": ">= 0.8" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9237,6 +9589,17 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -9563,6 +9926,30 @@ "regjsparser": "bin/parser" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -10436,6 +10823,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10613,6 +11013,54 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10956,6 +11404,13 @@ "dev": true, "license": "MIT" }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true, + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/package.json b/package.json index 1d6685b..fdd3b17 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,14 @@ "@types/react-dom": "^19.2.2", "autoprefixer": "^10.4.21", "babel-loader": "^10.0.0", + "copy-webpack-plugin": "^13.0.1", "css-loader": "^7.1.2", "eslint": "^9.38.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", "globals": "^16.4.0", + "html-webpack-plugin": "^5.6.4", "mini-css-extract-plugin": "^2.9.4", "postcss": "^8.5.6", "postcss-loader": "^8.2.0", diff --git a/webpack.config.js b/webpack.config.js index fde7e98..ac42a22 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ import path from 'path'; import { fileURLToPath } from 'url'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; // 处理ES模块中的__dirname const __filename = fileURLToPath(import.meta.url); @@ -24,6 +25,12 @@ export default { port: 3000, historyApiFallback: true, }, + plugins: [ + new HtmlWebpackPlugin({ + template: './index.html', + favicon: './assets/favicon.ico', + }), + ], module: { rules: [ { @@ -35,10 +42,10 @@ export default { options: { transpileOnly: true, compilerOptions: { - noEmit: false - } - } - } + noEmit: false, + }, + }, + }, ], }, { @@ -74,4 +81,4 @@ export default { }, extensions: ['.tsx', '.ts', '.jsx', '.js'], }, -}; \ No newline at end of file +};