From 7df5def91d9f5e98cf1aeb833662638e5cf6205f Mon Sep 17 00:00:00 2001 From: Abner <22141172+Silentely@users.noreply.github.com> Date: Sat, 25 Apr 2026 16:56:26 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore:=20=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E8=BD=AC=E8=AF=91=E7=9B=AE=E6=A0=87=E8=87=B3=20Chrome=2090+=20?= =?UTF-8?q?=E5=B9=B6=E5=BC=95=E5=85=A5=20browserslist=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - package.json 新增 browserslist 字段(defaults, Chrome >= 90, not dead) - transpile-dist-js.js 从 browserslist 动态解析目标,不再硬编码 Chrome 77 - 减少不必要的语法降级,输出更精简的现代 JS --- package.json | 5 +++++ scripts/build-static.js | 2 +- scripts/transpile-dist-js.js | 30 ++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8fe3739..8d942ec 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,11 @@ "webpack-cli": "^5.1.4", "workbox-webpack-plugin": "^7.0.0" }, + "browserslist": [ + "defaults", + "Chrome >= 90", + "not dead" + ], "engines": { "node": ">=18.0.0", "npm": ">=8.0.0" diff --git a/scripts/build-static.js b/scripts/build-static.js index 3a7f24c..14bf918 100755 --- a/scripts/build-static.js +++ b/scripts/build-static.js @@ -90,7 +90,7 @@ async function copyDirectory(source, destination) { } } - BuildLogger.log('🧩 转译 dist/src 下的 JS(目标 Chrome 77)...'); + BuildLogger.log('🧩 转译 dist/src 下的 JS(browserslist 目标)...'); await transpileDistJs(); // 注入 Sentry 配置 diff --git a/scripts/transpile-dist-js.js b/scripts/transpile-dist-js.js index e1f6dea..8e92f0f 100644 --- a/scripts/transpile-dist-js.js +++ b/scripts/transpile-dist-js.js @@ -6,6 +6,32 @@ const BuildLogger = require('./logger.js'); const distSrcDir = path.join(__dirname, '..', 'dist', 'src'); const PRESET_ENV = require.resolve('@babel/preset-env'); +const browserslist = require('browserslist'); + +// 从 browserslist 配置解析目标浏览器 +function resolveBrowserslistTargets() { + const query = [ + 'defaults', + 'Chrome >= 90', + 'not dead' + ]; + const browsers = browserslist(query); + const targets = {}; + for (const entry of browsers) { + const [name, version] = entry.split(' '); + const major = parseInt(version.split('.')[0], 10); + const mapped = { + chrome: 'chrome', firefox: 'firefox', safari: 'safari', + edge: 'edge', opera: 'opera', ios: 'ios', samsung: 'samsung', + ie: 'ie', android: 'android' + }; + const key = mapped[name]; + if (key && (!targets[key] || major < targets[key])) { + targets[key] = major; + } + } + return targets; +} function shouldSkipFile(filePath) { const normalized = filePath.split(path.sep).join('/'); @@ -43,7 +69,7 @@ async function transpileFile(filePath) { babelrc: false, configFile: false, presets: [[PRESET_ENV, { - targets: { chrome: '77' }, + targets: resolveBrowserslistTargets(), bugfixes: true, modules: false }]] @@ -75,7 +101,7 @@ async function transpileDistJs() { if (isChanged) changed += 1; } - BuildLogger.success(`JS 转译完成(Chrome 77 目标):处理 ${files.length} 个文件,更新 ${changed} 个文件`); + BuildLogger.success(`JS 转译完成(browserslist 目标):处理 ${files.length} 个文件,更新 ${changed} 个文件`); return { total: files.length, changed }; }