@lark-apaas/fullstack-vite-preset 1.0.9-alpha.3 → 1.0.9-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/polyfills/index.d.ts +15 -0
- package/lib/polyfills/index.d.ts.map +1 -0
- package/lib/polyfills/index.js +36 -0
- package/lib/polyfills/index.js.map +1 -0
- package/lib/preset.d.ts.map +1 -1
- package/lib/preset.js +25 -2
- package/lib/preset.js.map +1 -1
- package/lib/vite-plugins/banner-plugin.d.ts +3 -0
- package/lib/vite-plugins/banner-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/banner-plugin.js +26 -0
- package/lib/vite-plugins/banner-plugin.js.map +1 -0
- package/lib/vite-plugins/css-legacy-plugin.d.ts +12 -0
- package/lib/vite-plugins/css-legacy-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/css-legacy-plugin.js +205 -0
- package/lib/vite-plugins/css-legacy-plugin.js.map +1 -0
- package/lib/vite-plugins/polyfill-plugin.d.ts +12 -0
- package/lib/vite-plugins/polyfill-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/polyfill-plugin.js +120 -0
- package/lib/vite-plugins/polyfill-plugin.js.map +1 -0
- package/lib/vite-plugins/source-map-upload-plugin.d.ts +7 -0
- package/lib/vite-plugins/source-map-upload-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/source-map-upload-plugin.js +85 -0
- package/lib/vite-plugins/source-map-upload-plugin.js.map +1 -0
- package/lib/vite-plugins/static-assets-plugin.d.ts.map +1 -1
- package/lib/vite-plugins/static-assets-plugin.js +6 -2
- package/lib/vite-plugins/static-assets-plugin.js.map +1 -1
- package/lib/vite-plugins/vite-client-patch-plugin.d.ts +23 -0
- package/lib/vite-plugins/vite-client-patch-plugin.d.ts.map +1 -0
- package/lib/vite-plugins/vite-client-patch-plugin.js +53 -0
- package/lib/vite-plugins/vite-client-patch-plugin.js.map +1 -0
- package/package.json +5 -1
- package/src/overlay/index.js +1 -19
- package/src/overlay/vite-client.js +1 -19
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS 兼容性 Polyfills
|
|
3
|
+
*
|
|
4
|
+
* 使用 core-js 提供 iOS 15.4 以下版本需要的 polyfill
|
|
5
|
+
* 此文件会被单独打包成 polyfills.js,按需加载
|
|
6
|
+
*/
|
|
7
|
+
import 'core-js/actual/array/at';
|
|
8
|
+
import 'core-js/actual/string/at';
|
|
9
|
+
import 'core-js/actual/array/find-last';
|
|
10
|
+
import 'core-js/actual/array/find-last-index';
|
|
11
|
+
import 'core-js/actual/object/has-own';
|
|
12
|
+
import 'core-js/actual/promise/any';
|
|
13
|
+
import 'core-js/actual/aggregate-error';
|
|
14
|
+
import 'core-js/actual/structured-clone';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/polyfills/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,yBAAyB,CAAC;AACjC,OAAO,0BAA0B,CAAC;AAClC,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,CAAC;AACpC,OAAO,gCAAgC,CAAC;AACxC,OAAO,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* iOS 兼容性 Polyfills
|
|
4
|
+
*
|
|
5
|
+
* 使用 core-js 提供 iOS 15.4 以下版本需要的 polyfill
|
|
6
|
+
* 此文件会被单独打包成 polyfills.js,按需加载
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
// ECMAScript polyfills (core-js)
|
|
10
|
+
require("core-js/actual/array/at");
|
|
11
|
+
require("core-js/actual/string/at");
|
|
12
|
+
require("core-js/actual/array/find-last");
|
|
13
|
+
require("core-js/actual/array/find-last-index");
|
|
14
|
+
require("core-js/actual/object/has-own");
|
|
15
|
+
require("core-js/actual/promise/any");
|
|
16
|
+
require("core-js/actual/aggregate-error");
|
|
17
|
+
require("core-js/actual/structured-clone");
|
|
18
|
+
// Web Crypto API polyfill (不在 core-js 范围内)
|
|
19
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID !== 'function') {
|
|
20
|
+
Object.defineProperty(crypto, 'randomUUID', {
|
|
21
|
+
value: function randomUUID() {
|
|
22
|
+
const bytes = new Uint8Array(16);
|
|
23
|
+
crypto.getRandomValues(bytes);
|
|
24
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
25
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
26
|
+
let hex = '';
|
|
27
|
+
for (let i = 0; i < 16; i++) {
|
|
28
|
+
hex += (bytes[i] < 16 ? '0' : '') + bytes[i].toString(16);
|
|
29
|
+
}
|
|
30
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
31
|
+
},
|
|
32
|
+
writable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/polyfills/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,iCAAiC;AACjC,mCAAiC;AACjC,oCAAkC;AAClC,0CAAwC;AACxC,gDAA8C;AAC9C,yCAAuC;AACvC,sCAAoC;AACpC,0CAAwC;AACxC,2CAAyC;AAEzC,2CAA2C;AAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;IAC7E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,KAAK,EAAE,SAAS,UAAU;YACxB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACpC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7G,CAAC;QACD,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC"}
|
package/lib/preset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,MAAM,CAAC;AA+C9D,MAAM,WAAW,gCAAgC;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAaD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,UAAU,CA+XZ"}
|
package/lib/preset.js
CHANGED
|
@@ -10,6 +10,7 @@ const plugin_react_1 = __importDefault(require("@vitejs/plugin-react"));
|
|
|
10
10
|
const vite_tsconfig_paths_1 = __importDefault(require("vite-tsconfig-paths"));
|
|
11
11
|
const vite_inspector_plugin_1 = require("@lark-apaas/vite-inspector-plugin");
|
|
12
12
|
const devtool_kits_1 = require("@lark-apaas/devtool-kits");
|
|
13
|
+
const vite_client_patch_plugin_1 = require("./vite-plugins/vite-client-patch-plugin");
|
|
13
14
|
const route_parser_plugin_1 = require("./vite-plugins/route-parser-plugin");
|
|
14
15
|
const slardar_plugin_1 = require("./vite-plugins/slardar-plugin");
|
|
15
16
|
const view_context_plugin_1 = require("./vite-plugins/view-context-plugin");
|
|
@@ -19,8 +20,12 @@ const html_output_plugin_1 = require("./vite-plugins/html-output-plugin");
|
|
|
19
20
|
const runtime_injection_plugin_1 = require("./vite-plugins/runtime-injection-plugin");
|
|
20
21
|
const error_overlay_plugin_1 = require("./vite-plugins/error-overlay-plugin");
|
|
21
22
|
const static_assets_plugin_1 = require("./vite-plugins/static-assets-plugin");
|
|
23
|
+
const css_legacy_plugin_1 = require("./vite-plugins/css-legacy-plugin");
|
|
24
|
+
const polyfill_plugin_1 = require("./vite-plugins/polyfill-plugin");
|
|
25
|
+
const source_map_upload_plugin_1 = require("./vite-plugins/source-map-upload-plugin");
|
|
22
26
|
const snapdom_proxy_1 = require("./utils/snapdom-proxy");
|
|
23
27
|
const hmr_timing_1 = require("./utils/hmr-timing");
|
|
28
|
+
const banner_plugin_1 = require("./vite-plugins/banner-plugin");
|
|
24
29
|
function sendBackendUnavailable502(_err, _req, res) {
|
|
25
30
|
if (res.headersSent)
|
|
26
31
|
return;
|
|
@@ -33,6 +38,8 @@ function sendBackendUnavailable502(_err, _req, res) {
|
|
|
33
38
|
message: 'Backend service is not running',
|
|
34
39
|
}));
|
|
35
40
|
}
|
|
41
|
+
// 检查是否启用宽松 build 模式
|
|
42
|
+
const isLooseMode = process.env.FORCE_FRAMEWORK_BUILD_LOOSE_MODE === 'true';
|
|
36
43
|
function readAppFlags(rootDir) {
|
|
37
44
|
try {
|
|
38
45
|
return JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(rootDir, 'package.json'), 'utf-8')).flags || {};
|
|
@@ -48,8 +55,14 @@ function createRecommendViteConfig(options) {
|
|
|
48
55
|
const rootDir = process.cwd();
|
|
49
56
|
const serverPort = process.env.SERVER_PORT || '3000';
|
|
50
57
|
const appFlags = readAppFlags(rootDir);
|
|
58
|
+
// 优先从环境变量获取 RELEASE_ID,否则使用时间戳作为兜底
|
|
59
|
+
const releaseId = process.env.RELEASE_ID || new Date().toISOString();
|
|
51
60
|
// Build the plugins array
|
|
52
61
|
const plugins = [
|
|
62
|
+
// Cloud env patch: suppress auto page-reload on HMR WebSocket reconnect (dev only)
|
|
63
|
+
isDev && (0, vite_client_patch_plugin_1.viteClientPatchPlugin)(),
|
|
64
|
+
// aily-cli: add releaseId to window
|
|
65
|
+
(0, banner_plugin_1.bannerPlugin)(`window.__RELEASE_COMMIT_ID__ = '${releaseId}';`),
|
|
53
66
|
// Error overlay plugin - replaces Vite's native error overlay with custom one
|
|
54
67
|
// Must be first to intercept config and disable native overlay
|
|
55
68
|
// Only enabled in development mode
|
|
@@ -66,10 +79,11 @@ function createRecommendViteConfig(options) {
|
|
|
66
79
|
// Must be early to ensure runtime is loaded before app code
|
|
67
80
|
(0, runtime_injection_plugin_1.runtimeInjectionPlugin)({ clientBasePath }),
|
|
68
81
|
// React plugin with Babel for styled-jsx support
|
|
82
|
+
// 宽松模式下使用 @lark-apaas/styled-jsx/babel(对齐 rspack-preset),否则使用社区版
|
|
69
83
|
(0, plugin_react_1.default)({
|
|
70
84
|
jsxRuntime: 'automatic',
|
|
71
85
|
babel: {
|
|
72
|
-
plugins: [['styled-jsx/babel']],
|
|
86
|
+
plugins: [[isLooseMode ? '@lark-apaas/styled-jsx/babel' : 'styled-jsx/babel']],
|
|
73
87
|
},
|
|
74
88
|
// Only enable fast refresh in dev mode
|
|
75
89
|
...(enableReactRefresh ? {} : { fastRefresh: false }),
|
|
@@ -95,6 +109,10 @@ function createRecommendViteConfig(options) {
|
|
|
95
109
|
(0, view_context_plugin_1.viewContextPlugin)(),
|
|
96
110
|
// OG Meta tags injection plugin
|
|
97
111
|
(0, og_meta_plugin_1.ogMetaPlugin)(),
|
|
112
|
+
// 生产环境:生成 legacy CSS 并注入检测脚本(对齐 rspack-preset)
|
|
113
|
+
!isDev && (0, css_legacy_plugin_1.cssLegacyPlugin)(),
|
|
114
|
+
// 生产环境:为旧浏览器提供 polyfill(仅在需要时加载,对齐 rspack-preset)
|
|
115
|
+
!isDev && (0, polyfill_plugin_1.polyfillPlugin)(),
|
|
98
116
|
// HTML output plugin - handles HTML path and dev mode disk write
|
|
99
117
|
(0, html_output_plugin_1.htmlOutputPlugin)({
|
|
100
118
|
isDev,
|
|
@@ -102,6 +120,11 @@ function createRecommendViteConfig(options) {
|
|
|
102
120
|
}),
|
|
103
121
|
// HMR timing plugin (dev only)
|
|
104
122
|
isDev && (0, hmr_timing_1.createHmrTimingPlugin)(),
|
|
123
|
+
// 生产环境下,收集 sourcemap
|
|
124
|
+
!isDev &&
|
|
125
|
+
(0, source_map_upload_plugin_1.sourceMapUploadPlugin)({
|
|
126
|
+
outputDir: path_1.default.resolve(rootDir, 'dist/sourcemaps'),
|
|
127
|
+
}),
|
|
105
128
|
];
|
|
106
129
|
const config = {
|
|
107
130
|
root: rootDir,
|
|
@@ -208,7 +231,7 @@ function createRecommendViteConfig(options) {
|
|
|
208
231
|
build: {
|
|
209
232
|
outDir: path_1.default.resolve(rootDir, 'dist/client'),
|
|
210
233
|
emptyOutDir: false,
|
|
211
|
-
sourcemap: isDev,
|
|
234
|
+
sourcemap: isDev ? true : 'hidden', // Align with rspack-preset's devtool config
|
|
212
235
|
minify: !isDev ? 'esbuild' : false,
|
|
213
236
|
rollupOptions: {
|
|
214
237
|
input: path_1.default.resolve(rootDir, 'client/index.html'),
|
package/lib/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/banner-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.bannerPlugin = bannerPlugin;
|
|
7
|
+
const magic_string_1 = __importDefault(require("magic-string"));
|
|
8
|
+
function bannerPlugin(banner) {
|
|
9
|
+
return {
|
|
10
|
+
name: 'vite-plugin-banner',
|
|
11
|
+
enforce: 'post',
|
|
12
|
+
renderChunk(code, chunk) {
|
|
13
|
+
// Only add banner to entry chunks
|
|
14
|
+
if (chunk.isEntry) {
|
|
15
|
+
const magicString = new magic_string_1.default(code);
|
|
16
|
+
magicString.prepend(`${banner}\n`);
|
|
17
|
+
return {
|
|
18
|
+
code: magicString.toString(),
|
|
19
|
+
map: magicString.generateMap({ hires: true }),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=banner-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/banner-plugin.ts"],"names":[],"mappings":";;;;;AAGA,oCAiBC;AAnBD,gEAAuC;AAEvC,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,MAAM;QACf,WAAW,CAAC,IAAI,EAAE,KAAK;YACrB,kCAAkC;YAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,IAAI,sBAAW,CAAC,IAAI,CAAC,CAAC;gBAC1C,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;gBACnC,OAAO;oBACL,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;oBAC5B,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAC9C,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* CSS Legacy Plugin (Vite)
|
|
4
|
+
*
|
|
5
|
+
* 对齐 rspack-preset 的 CssLegacyPlugin:
|
|
6
|
+
* 在构建完成后生成一份兼容旧浏览器的 CSS 文件(.legacy.css)
|
|
7
|
+
* 并在 HTML 中注入检测脚本,根据浏览器版本加载对应的 CSS
|
|
8
|
+
*
|
|
9
|
+
* 仅在生产构建时生效
|
|
10
|
+
*/
|
|
11
|
+
export declare function cssLegacyPlugin(): Plugin;
|
|
12
|
+
//# sourceMappingURL=css-legacy-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-legacy-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/css-legacy-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAgGxC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cssLegacyPlugin = cssLegacyPlugin;
|
|
4
|
+
const lightningcss_1 = require("lightningcss");
|
|
5
|
+
/**
|
|
6
|
+
* CSS Legacy Plugin (Vite)
|
|
7
|
+
*
|
|
8
|
+
* 对齐 rspack-preset 的 CssLegacyPlugin:
|
|
9
|
+
* 在构建完成后生成一份兼容旧浏览器的 CSS 文件(.legacy.css)
|
|
10
|
+
* 并在 HTML 中注入检测脚本,根据浏览器版本加载对应的 CSS
|
|
11
|
+
*
|
|
12
|
+
* 仅在生产构建时生效
|
|
13
|
+
*/
|
|
14
|
+
function cssLegacyPlugin() {
|
|
15
|
+
return {
|
|
16
|
+
name: 'fullstack-css-legacy',
|
|
17
|
+
apply: 'build',
|
|
18
|
+
enforce: 'post',
|
|
19
|
+
generateBundle(_options, bundle) {
|
|
20
|
+
// 1. 找到所有 CSS 产物,生成 legacy 版本
|
|
21
|
+
const cssFiles = Object.keys(bundle).filter((name) => name.endsWith('.css') && !name.endsWith('.legacy.css'));
|
|
22
|
+
for (const cssFile of cssFiles) {
|
|
23
|
+
const chunk = bundle[cssFile];
|
|
24
|
+
if (chunk.type !== 'asset')
|
|
25
|
+
continue;
|
|
26
|
+
const source = typeof chunk.source === 'string' ? chunk.source : Buffer.from(chunk.source).toString('utf-8');
|
|
27
|
+
try {
|
|
28
|
+
// 预处理 CSS
|
|
29
|
+
let cssContent = preprocessCss(source);
|
|
30
|
+
// 使用 LightningCSS 转换现代 CSS 特性
|
|
31
|
+
const result = (0, lightningcss_1.transform)({
|
|
32
|
+
filename: cssFile,
|
|
33
|
+
code: Buffer.from(cssContent),
|
|
34
|
+
minify: true,
|
|
35
|
+
targets: {
|
|
36
|
+
ios_saf: (12 << 16),
|
|
37
|
+
safari: (12 << 16),
|
|
38
|
+
chrome: (80 << 16),
|
|
39
|
+
},
|
|
40
|
+
include: lightningcss_1.Features.Nesting |
|
|
41
|
+
lightningcss_1.Features.MediaQueries |
|
|
42
|
+
lightningcss_1.Features.Colors |
|
|
43
|
+
lightningcss_1.Features.Selectors |
|
|
44
|
+
lightningcss_1.Features.ColorFunction |
|
|
45
|
+
lightningcss_1.Features.OklabColors |
|
|
46
|
+
lightningcss_1.Features.LabColors |
|
|
47
|
+
lightningcss_1.Features.P3Colors |
|
|
48
|
+
lightningcss_1.Features.HexAlphaColors |
|
|
49
|
+
lightningcss_1.Features.LightDark,
|
|
50
|
+
errorRecovery: true,
|
|
51
|
+
});
|
|
52
|
+
// 后处理 CSS
|
|
53
|
+
let legacyCss = Buffer.from(result.code).toString('utf-8');
|
|
54
|
+
legacyCss = postprocessCss(legacyCss);
|
|
55
|
+
const legacyFileName = cssFile.replace('.css', '.legacy.css');
|
|
56
|
+
this.emitFile({
|
|
57
|
+
type: 'asset',
|
|
58
|
+
fileName: legacyFileName,
|
|
59
|
+
source: legacyCss,
|
|
60
|
+
});
|
|
61
|
+
console.log(`[CssLegacyPlugin] Generated ${legacyFileName} (${Math.round(legacyCss.length / 1024)}KB)`);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error(`[CssLegacyPlugin] Failed to transform ${cssFile}:`, error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// 2. 修改 HTML,注入 CSS 版本检测脚本
|
|
68
|
+
const htmlFiles = Object.keys(bundle).filter((name) => name.endsWith('.html'));
|
|
69
|
+
for (const htmlFile of htmlFiles) {
|
|
70
|
+
const chunk = bundle[htmlFile];
|
|
71
|
+
if (chunk.type !== 'asset')
|
|
72
|
+
continue;
|
|
73
|
+
let htmlContent = typeof chunk.source === 'string' ? chunk.source : Buffer.from(chunk.source).toString('utf-8');
|
|
74
|
+
const cssLinkRegex = /<link[^>]+href="([^"]+\.css)"[^>]*>/g;
|
|
75
|
+
const cssLinks = [...htmlContent.matchAll(cssLinkRegex)];
|
|
76
|
+
if (cssLinks.length === 0)
|
|
77
|
+
continue;
|
|
78
|
+
const detectionScript = generateDetectionScript(cssLinks);
|
|
79
|
+
// 移除原始 CSS link 标签
|
|
80
|
+
for (const match of cssLinks) {
|
|
81
|
+
htmlContent = htmlContent.replace(match[0], '');
|
|
82
|
+
}
|
|
83
|
+
// 注入检测脚本到 <head>
|
|
84
|
+
htmlContent = htmlContent.replace(/<head([^>]*)>/i, `<head$1>\n${detectionScript}`);
|
|
85
|
+
chunk.source = htmlContent;
|
|
86
|
+
console.log(`[CssLegacyPlugin] Updated ${htmlFile} with CSS detection script`);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 预处理 CSS:移除/转换 LightningCSS 不支持降级的特性
|
|
93
|
+
*/
|
|
94
|
+
function preprocessCss(css) {
|
|
95
|
+
// 1. 移除所有 @property 规则(iOS 16.4+ 才支持)
|
|
96
|
+
css = css.replace(/@property\s+--[\w-]+\s*\{[^}]*\}/g, '');
|
|
97
|
+
// 2. 展开 @layer 规则(iOS 15.4+ 才支持)
|
|
98
|
+
css = unwrapAtLayer(css);
|
|
99
|
+
// 3. 移除 @supports 中的 color-mix 检测块
|
|
100
|
+
css = removeColorMixSupports(css);
|
|
101
|
+
return css;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 后处理 CSS:清理可能残留的不支持特性
|
|
105
|
+
*/
|
|
106
|
+
function postprocessCss(css) {
|
|
107
|
+
css = unwrapAtLayer(css);
|
|
108
|
+
css = css.replace(/@property\s+--[\w-]+\s*\{[^}]*\}/g, '');
|
|
109
|
+
css = removeColorMixSupports(css);
|
|
110
|
+
css = css.replace(/@supports\s*\([^)]*\)\s*\{\s*\}/g, '');
|
|
111
|
+
return css;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 展开 @layer 规则,保留内部样式
|
|
115
|
+
*/
|
|
116
|
+
function unwrapAtLayer(css) {
|
|
117
|
+
let result = css;
|
|
118
|
+
let changed = true;
|
|
119
|
+
while (changed) {
|
|
120
|
+
changed = false;
|
|
121
|
+
const layerRegex = /@layer\s+[\w-]+\s*\{/g;
|
|
122
|
+
let match;
|
|
123
|
+
while ((match = layerRegex.exec(result)) !== null) {
|
|
124
|
+
const startIndex = match.index;
|
|
125
|
+
const contentStart = startIndex + match[0].length;
|
|
126
|
+
let depth = 1;
|
|
127
|
+
let i = contentStart;
|
|
128
|
+
while (i < result.length && depth > 0) {
|
|
129
|
+
if (result[i] === '{')
|
|
130
|
+
depth++;
|
|
131
|
+
else if (result[i] === '}')
|
|
132
|
+
depth--;
|
|
133
|
+
i++;
|
|
134
|
+
}
|
|
135
|
+
if (depth === 0) {
|
|
136
|
+
const innerContent = result.slice(contentStart, i - 1);
|
|
137
|
+
result = result.slice(0, startIndex) + innerContent + result.slice(i);
|
|
138
|
+
changed = true;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 移除 @supports (color: color-mix(...)) 块
|
|
147
|
+
*/
|
|
148
|
+
function removeColorMixSupports(css) {
|
|
149
|
+
let result = css;
|
|
150
|
+
let changed = true;
|
|
151
|
+
while (changed) {
|
|
152
|
+
changed = false;
|
|
153
|
+
const supportsRegex = /@supports\s*\(\s*color\s*:\s*color-mix\s*\([^)]+\)\s*\)\s*\{/g;
|
|
154
|
+
let match;
|
|
155
|
+
while ((match = supportsRegex.exec(result)) !== null) {
|
|
156
|
+
const startIndex = match.index;
|
|
157
|
+
const contentStart = startIndex + match[0].length;
|
|
158
|
+
let depth = 1;
|
|
159
|
+
let i = contentStart;
|
|
160
|
+
while (i < result.length && depth > 0) {
|
|
161
|
+
if (result[i] === '{')
|
|
162
|
+
depth++;
|
|
163
|
+
else if (result[i] === '}')
|
|
164
|
+
depth--;
|
|
165
|
+
i++;
|
|
166
|
+
}
|
|
167
|
+
if (depth === 0) {
|
|
168
|
+
result = result.slice(0, startIndex) + result.slice(i);
|
|
169
|
+
changed = true;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
function generateDetectionScript(cssLinks) {
|
|
177
|
+
const cssUrls = cssLinks.map((match) => match[1]);
|
|
178
|
+
return `<script>
|
|
179
|
+
(function() {
|
|
180
|
+
var isModernBrowser = (function() {
|
|
181
|
+
try {
|
|
182
|
+
if (typeof CSS === 'undefined' || typeof CSS.supports !== 'function') return false;
|
|
183
|
+
if (!CSS.supports('selector(:has(*))')) return false;
|
|
184
|
+
if (!CSS.supports('color', 'color-mix(in srgb, red, blue)')) return false;
|
|
185
|
+
if (!CSS.supports('color', 'oklch(50% 0.1 0)')) return false;
|
|
186
|
+
return true;
|
|
187
|
+
} catch (e) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
})();
|
|
191
|
+
|
|
192
|
+
var cssUrls = ${JSON.stringify(cssUrls)};
|
|
193
|
+
var suffix = isModernBrowser ? '' : '.legacy';
|
|
194
|
+
|
|
195
|
+
cssUrls.forEach(function(url) {
|
|
196
|
+
var finalUrl = url.replace(/\\.css$/, suffix + '.css');
|
|
197
|
+
document.write('<link rel="stylesheet" href="' + finalUrl + '">');
|
|
198
|
+
});
|
|
199
|
+
})();
|
|
200
|
+
</script>
|
|
201
|
+
<noscript>
|
|
202
|
+
${cssUrls.map((url) => ` <link rel="stylesheet" href="${url}">`).join('\n')}
|
|
203
|
+
</noscript>`;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=css-legacy-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-legacy-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/css-legacy-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
/**
|
|
3
|
+
* Polyfill Plugin (Vite)
|
|
4
|
+
*
|
|
5
|
+
* 对齐 rspack-preset 的 PolyfillPlugin:
|
|
6
|
+
* 使用 core-js 为旧版浏览器生成独立的 polyfill 文件
|
|
7
|
+
* 通过检测脚本按需加载,现代浏览器不会加载 polyfill
|
|
8
|
+
*
|
|
9
|
+
* 仅在生产构建时生效
|
|
10
|
+
*/
|
|
11
|
+
export declare function polyfillPlugin(): Plugin;
|
|
12
|
+
//# sourceMappingURL=polyfill-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/polyfill-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAGnD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAiEvC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.polyfillPlugin = polyfillPlugin;
|
|
40
|
+
const path_1 = __importDefault(require("path"));
|
|
41
|
+
/**
|
|
42
|
+
* Polyfill Plugin (Vite)
|
|
43
|
+
*
|
|
44
|
+
* 对齐 rspack-preset 的 PolyfillPlugin:
|
|
45
|
+
* 使用 core-js 为旧版浏览器生成独立的 polyfill 文件
|
|
46
|
+
* 通过检测脚本按需加载,现代浏览器不会加载 polyfill
|
|
47
|
+
*
|
|
48
|
+
* 仅在生产构建时生效
|
|
49
|
+
*/
|
|
50
|
+
function polyfillPlugin() {
|
|
51
|
+
let config;
|
|
52
|
+
return {
|
|
53
|
+
name: 'fullstack-polyfill',
|
|
54
|
+
apply: 'build',
|
|
55
|
+
enforce: 'post',
|
|
56
|
+
configResolved(resolvedConfig) {
|
|
57
|
+
config = resolvedConfig;
|
|
58
|
+
},
|
|
59
|
+
async generateBundle(_options, bundle) {
|
|
60
|
+
// 使用 esbuild 打包 polyfills 入口
|
|
61
|
+
const polyfillEntry = path_1.default.resolve(__dirname, '../polyfills/index');
|
|
62
|
+
const { build } = await Promise.resolve().then(() => __importStar(require('esbuild')));
|
|
63
|
+
try {
|
|
64
|
+
const result = await build({
|
|
65
|
+
entryPoints: [polyfillEntry],
|
|
66
|
+
bundle: true,
|
|
67
|
+
write: false,
|
|
68
|
+
format: 'iife',
|
|
69
|
+
minify: true,
|
|
70
|
+
target: ['es2015'],
|
|
71
|
+
});
|
|
72
|
+
const polyfillCode = result.outputFiles?.[0]?.text || '';
|
|
73
|
+
this.emitFile({
|
|
74
|
+
type: 'asset',
|
|
75
|
+
fileName: 'polyfills.js',
|
|
76
|
+
source: polyfillCode,
|
|
77
|
+
});
|
|
78
|
+
console.log(`[PolyfillPlugin] Generated polyfills.js (${Math.round(polyfillCode.length / 1024)}KB)`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('[PolyfillPlugin] Failed to build polyfills:', error);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// 修改 HTML,注入检测脚本
|
|
85
|
+
const base = config.base || '/';
|
|
86
|
+
const polyfillUrl = `${base}polyfills.js`.replace(/\/+/g, '/').replace(':/', '://');
|
|
87
|
+
const htmlFiles = Object.keys(bundle).filter((name) => name.endsWith('.html'));
|
|
88
|
+
for (const htmlFile of htmlFiles) {
|
|
89
|
+
const chunk = bundle[htmlFile];
|
|
90
|
+
if (chunk.type !== 'asset')
|
|
91
|
+
continue;
|
|
92
|
+
let htmlContent = typeof chunk.source === 'string' ? chunk.source : Buffer.from(chunk.source).toString('utf-8');
|
|
93
|
+
const detectionScript = generateDetectionScript(polyfillUrl);
|
|
94
|
+
// 注入到 <head> 最前面
|
|
95
|
+
htmlContent = htmlContent.replace(/<head([^>]*)>/i, `<head$1>\n${detectionScript}`);
|
|
96
|
+
chunk.source = htmlContent;
|
|
97
|
+
console.log(`[PolyfillPlugin] Updated ${htmlFile} with polyfill detection`);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function generateDetectionScript(polyfillUrl) {
|
|
103
|
+
return `<script>
|
|
104
|
+
(function(){
|
|
105
|
+
var needsPolyfill=(function(){
|
|
106
|
+
try{
|
|
107
|
+
if(typeof crypto==="undefined"||typeof crypto.randomUUID!=="function")return true;
|
|
108
|
+
if(typeof Object.hasOwn!=="function")return true;
|
|
109
|
+
if(typeof[].at!=="function")return true;
|
|
110
|
+
if(typeof[].findLast!=="function")return true;
|
|
111
|
+
return false;
|
|
112
|
+
}catch(e){return true}
|
|
113
|
+
})();
|
|
114
|
+
if(needsPolyfill){
|
|
115
|
+
document.write('<script src="${polyfillUrl}"><\\/script>');
|
|
116
|
+
}
|
|
117
|
+
})();
|
|
118
|
+
</script>`;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=polyfill-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/polyfill-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Plugin } from 'vite';
|
|
2
|
+
interface SourceMapUploadPluginOptions {
|
|
3
|
+
outputDir: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function sourceMapUploadPlugin(options: SourceMapUploadPluginOptions): Plugin;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=source-map-upload-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-map-upload-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/source-map-upload-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAInD,UAAU,4BAA4B;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,MAAM,CAiER"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.sourceMapUploadPlugin = sourceMapUploadPlugin;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
function sourceMapUploadPlugin(options) {
|
|
40
|
+
let config;
|
|
41
|
+
return {
|
|
42
|
+
name: 'vite-plugin-source-map-upload',
|
|
43
|
+
apply: 'build', // Only apply during build
|
|
44
|
+
enforce: 'post',
|
|
45
|
+
configResolved(resolvedConfig) {
|
|
46
|
+
config = resolvedConfig;
|
|
47
|
+
},
|
|
48
|
+
async writeBundle(outputOptions) {
|
|
49
|
+
console.log('SourceMapUploadPlugin: Starting sourcemap consolidation process...');
|
|
50
|
+
const outputDir = outputOptions.dir || config.build.outDir;
|
|
51
|
+
if (!outputDir) {
|
|
52
|
+
console.warn('SourceMapUploadPlugin: output.dir is not defined. Skipping sourcemap consolidation.');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const sourceMapFiles = fs
|
|
56
|
+
.readdirSync(outputDir, { recursive: true })
|
|
57
|
+
.filter(file => file.toString().endsWith('.map'));
|
|
58
|
+
if (sourceMapFiles.length === 0) {
|
|
59
|
+
console.log('SourceMapUploadPlugin: No sourcemaps found to consolidate.');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const outputBaseDir = path.basename(outputDir); // e.g., 'client'
|
|
63
|
+
const sourcemapTargetDir = path.join(options.outputDir, outputBaseDir); // e.g., 'dist/sourcemaps/client'
|
|
64
|
+
for (const sourceMapFile of sourceMapFiles) {
|
|
65
|
+
const sourceMapPath = path.join(outputDir, sourceMapFile.toString());
|
|
66
|
+
const destinationPath = path.join(sourcemapTargetDir, sourceMapFile.toString());
|
|
67
|
+
try {
|
|
68
|
+
// Ensure the destination directory exists
|
|
69
|
+
const destinationDir = path.dirname(destinationPath);
|
|
70
|
+
if (!fs.existsSync(destinationDir)) {
|
|
71
|
+
fs.mkdirSync(destinationDir, { recursive: true });
|
|
72
|
+
}
|
|
73
|
+
// Move the file
|
|
74
|
+
fs.renameSync(sourceMapPath, destinationPath);
|
|
75
|
+
console.log(`SourceMapUploadPlugin: Consolidated ${sourceMapFile} to ${destinationPath}`);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
const errorMessage = `SourceMapUploadPlugin: Failed to consolidate ${sourceMapFile}.`;
|
|
79
|
+
console.error(errorMessage, error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=source-map-upload-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-map-upload-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/source-map-upload-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sDAmEC;AA1ED,uCAAyB;AACzB,2CAA6B;AAM7B,SAAgB,qBAAqB,CACnC,OAAqC;IAErC,IAAI,MAAsB,CAAC;IAE3B,OAAO;QACL,IAAI,EAAE,+BAA+B;QACrC,KAAK,EAAE,OAAO,EAAE,0BAA0B;QAC1C,OAAO,EAAE,MAAM;QAEf,cAAc,CAAC,cAAc;YAC3B,MAAM,GAAG,cAAc,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,aAAa;YAC7B,OAAO,CAAC,GAAG,CACT,oEAAoE,CACrE,CAAC;YAEF,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,qFAAqF,CACtF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,EAAE;iBACtB,WAAW,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAEpD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CACT,4DAA4D,CAC7D,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB;YACjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,OAAO,CAAC,SAAS,EACjB,aAAa,CACd,CAAC,CAAC,iCAAiC;YAEpC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEhF,IAAI,CAAC;oBACH,0CAA0C;oBAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;wBACnC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACpD,CAAC;oBAED,gBAAgB;oBAChB,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CACT,uCAAuC,aAAa,OAAO,eAAe,EAAE,CAC7E,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,gDAAgD,aAAa,GAAG,CAAC;oBACtF,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-assets-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/static-assets-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAoD,MAAM,MAAM,CAAC;AA4CrF,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"static-assets-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/static-assets-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAoD,MAAM,MAAM,CAAC;AA4CrF,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,MAAM,CAyVR;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -206,8 +206,12 @@ function staticAssetsPlugin(options = {}) {
|
|
|
206
206
|
return `export default window.__STATIC_JSON__['${key}'];`;
|
|
207
207
|
}
|
|
208
208
|
else {
|
|
209
|
-
const
|
|
210
|
-
|
|
209
|
+
const envBaseUrl = typeof process !== 'undefined' ? process.env?.STATIC_ASSETS_BASE_URL : undefined;
|
|
210
|
+
// envBaseUrl (downloadURLPrefix) 已指向 static 目录,无需再拼 /static/
|
|
211
|
+
const staticUrl = envBaseUrl
|
|
212
|
+
? `${envBaseUrl.replace(/\/+$/, '')}/${relativePath}`
|
|
213
|
+
: `${clientBasePath}/static/${relativePath}`;
|
|
214
|
+
return `export default ${JSON.stringify(staticUrl)};`;
|
|
211
215
|
}
|
|
212
216
|
},
|
|
213
217
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-assets-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/static-assets-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEH,
|
|
1
|
+
{"version":3,"file":"static-assets-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/static-assets-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEH,gDA2VC;AA3ZD,uCAAyB;AACzB,2CAA6B;AAC7B,+BAA4B;AAG5B,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAC/C,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAElD,6FAA6F;AAC7F,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzF;;;GAGG;AACH,SAAS,UAAU,CAAC,YAAoB;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAElD,mDAAmD;IACnD,IAAI,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;YAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAmBD,SAAgB,kBAAkB,CAChC,UAAqC,EAAE;IAEvC,MAAM,EAAE,cAAc,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,cAAc,GAA0B,IAAI,CAAC;IAEjD,2CAA2C;IAC3C,IAAI,aAAa,GAA0B,IAAI,CAAC;IAEhD;;OAEG;IACH,SAAS,UAAU,CAAC,QAAgB;QAClC,sDAAsD;QACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS,aAAa;QACpB,MAAM,QAAQ,GAAmB,EAAE,CAAC;QAEpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,WAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACvC,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC7B,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,8CAA8C,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,SAAS,WAAW;QAClB,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;YAC5B,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,KAAK;QAEd,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;YACzB,KAAK,GAAG,OAAO,KAAK,OAAO,CAAC;QAC9B,CAAC;QAED,cAAc,CAAC,MAAM;YACnB,cAAc,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED;;;;;WAKG;QACH,SAAS,CAAC,EAAU;YAClB,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;gBAEpD,qEAAqE;gBACrE,oDAAoD;gBACpD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;gBACjD,CAAC;gBAED,0EAA0E;gBAC1E,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,UAAU,CAAC;gBACpB,CAAC;gBAED,MAAM,SAAS,GAAG,qBAAqB,GAAG,SAAS,CAAC;gBACpD,yDAAyD;gBACzD,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;;;WAKG;QACH,IAAI,CAAC,EAAU;YACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC1D,qDAAqD;YACrD,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE9C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,KAAK,EAAE,CAAC;oBACV,2DAA2D;oBAC3D,uEAAuE;oBACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBACpD,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACnD,OAAO,kBAAkB,OAAO,GAAG,CAAC;oBACtC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,wCAAwC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;wBACxE,OAAO,2BAA2B,CAAC;oBACrC,CAAC;gBACH,CAAC;gBACD,4DAA4D;gBAC5D,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;gBACrC,OAAO,0CAA0C,GAAG,KAAK,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpG,6DAA6D;gBAC7D,MAAM,SAAS,GAAG,UAAU;oBAC1B,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE;oBACrD,CAAC,CAAC,GAAG,cAAc,WAAW,YAAY,EAAE,CAAC;gBAC/C,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;YACxD,CAAC;QACH,CAAC;QAED;;WAEG;QACH,kBAAkB;YAChB,iEAAiE;YACjE,gDAAgD;YAChD,IAAI,KAAK;gBAAE,OAAO;YAElB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAE/B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;YAE9E,MAAM,IAAI,GAAwB;gBAChC;oBACE,GAAG,EAAE,QAAQ;oBACb,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,cAAc;iBACzB;aACF,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QAED;;WAEG;QACH,eAAe,CAAC,MAAqB;YACnC,4CAA4C;YAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAE/B,qCAAqC;YACrC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEvB,0CAA0C;YAC1C,MAAM,sBAAsB,GAAG,CAAC,WAAmB,EAAE,EAAE;gBACrD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAE9C,IAAI,MAAM,EAAE,CAAC;oBACX,2DAA2D;oBAC3D,wDAAwD;oBACxD,MAAM,QAAQ,GAAG,qBAAqB,GAAG,YAAY,CAAC;oBACtD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACvD,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC3C,CAAC;oBAED,wCAAwC;oBACxC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,oBAAoB;wBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;qBAC7B,CAAC,CAAC;oBAEH,4EAA4E;oBAC5E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,GAAG;qBACV,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,oDAAoD;oBACpD,yEAAyE;oBACzE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,qBAAqB;wBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC;YAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC1C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,WAAmB,EAAE,EAAE;gBAC3C,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACtC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;wBAC3D,MAAM,QAAQ,GAAG,qBAAqB,GAAG,YAAY,CAAC;wBACtD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACvD,IAAI,GAAG,EAAE,CAAC;4BACR,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;oBACD,oCAAoC;oBACpC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,GAAG;qBACV,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,iCAAiC;YACjC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACxC,MAAM,YAAY,GAAG,GAAG,cAAc,UAAU,CAAC;gBACjD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAE1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAClC,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;gBAED,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,YAAoB,CAAC;gBACzB,IAAI,CAAC;oBACH,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBACrD,CAAC;gBAAC,MAAM,CAAC;oBACP,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvB,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAEpD,mCAAmC;gBACnC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACrB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACrB,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACrB,OAAO;gBACT,CAAC;gBAED,gBAAgB;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,SAAS,GAA2B;oBACxC,OAAO,EAAE,kBAAkB;oBAC3B,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,eAAe;oBACvB,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,cAAc;oBACtB,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,YAAY;oBACtB,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,+BAA+B;oBACvC,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,UAAU;oBAClB,KAAK,EAAE,wBAAwB;oBAC/B,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,WAAW;oBACpB,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,YAAY;iBACtB,CAAC;gBAEF,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;gBAEjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBAC3C,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBAE3C,kBAAkB;gBAClB,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;QAED;;WAEG;QACH,WAAW;YACT,IAAI,KAAK,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3C,gEAAgE;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAExD,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;KACF,CAAC;AACJ,CAAC;AAED,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite Client Patch Plugin
|
|
3
|
+
*
|
|
4
|
+
* 问题背景:
|
|
5
|
+
* 在云端开发环境(如通过反向代理 aiforce.run 访问)中,电脑休眠后唤醒,
|
|
6
|
+
* Vite HMR WebSocket 断连重连时会触发 location.reload()。
|
|
7
|
+
* 此时浏览器 HTTP/2 连接池中持有休眠前的死连接,reload 请求复用该死连接,
|
|
8
|
+
* 导致页面 blocked ~18s 后超时白屏(ERR_CONNECTION_TIMED_OUT)。
|
|
9
|
+
*
|
|
10
|
+
* 根本原因:
|
|
11
|
+
* Vite 的 @vite/client 在 vite:ws:disconnect 后调用 waitForSuccessfulPing(),
|
|
12
|
+
* WS ping 成功(新 TCP)后立即 location.reload(),
|
|
13
|
+
* 但 reload 走的是旧的死 HTTP/2 连接,不是新 TCP。
|
|
14
|
+
*
|
|
15
|
+
* 解决方案:
|
|
16
|
+
* 通过 Vite transform hook 拦截 @vite/client,直接移除 WS 重连后的 location.reload()。
|
|
17
|
+
* 用户若需要获取最新代码,手动刷新即可(符合云端 IDE 使用预期)。
|
|
18
|
+
*
|
|
19
|
+
* 适用范围:仅 dev server (apply: 'serve')
|
|
20
|
+
*/
|
|
21
|
+
import type { Plugin } from 'vite';
|
|
22
|
+
export declare function viteClientPatchPlugin(): Plugin;
|
|
23
|
+
//# sourceMappingURL=vite-client-patch-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-client-patch-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAUnC,wBAAgB,qBAAqB,IAAI,MAAM,CA+B9C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vite Client Patch Plugin
|
|
4
|
+
*
|
|
5
|
+
* 问题背景:
|
|
6
|
+
* 在云端开发环境(如通过反向代理 aiforce.run 访问)中,电脑休眠后唤醒,
|
|
7
|
+
* Vite HMR WebSocket 断连重连时会触发 location.reload()。
|
|
8
|
+
* 此时浏览器 HTTP/2 连接池中持有休眠前的死连接,reload 请求复用该死连接,
|
|
9
|
+
* 导致页面 blocked ~18s 后超时白屏(ERR_CONNECTION_TIMED_OUT)。
|
|
10
|
+
*
|
|
11
|
+
* 根本原因:
|
|
12
|
+
* Vite 的 @vite/client 在 vite:ws:disconnect 后调用 waitForSuccessfulPing(),
|
|
13
|
+
* WS ping 成功(新 TCP)后立即 location.reload(),
|
|
14
|
+
* 但 reload 走的是旧的死 HTTP/2 连接,不是新 TCP。
|
|
15
|
+
*
|
|
16
|
+
* 解决方案:
|
|
17
|
+
* 通过 Vite transform hook 拦截 @vite/client,直接移除 WS 重连后的 location.reload()。
|
|
18
|
+
* 用户若需要获取最新代码,手动刷新即可(符合云端 IDE 使用预期)。
|
|
19
|
+
*
|
|
20
|
+
* 适用范围:仅 dev server (apply: 'serve')
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.viteClientPatchPlugin = viteClientPatchPlugin;
|
|
24
|
+
/**
|
|
25
|
+
* 匹配 vite:ws:disconnect 处理器中的重连刷新代码:
|
|
26
|
+
* await waitForSuccessfulPing(url.href);
|
|
27
|
+
* location.reload();
|
|
28
|
+
*/
|
|
29
|
+
const RECONNECT_RELOAD_PATTERN = /(await waitForSuccessfulPing\(url\.href\);)\r?\n(\s*)location\.reload\(\);/;
|
|
30
|
+
function viteClientPatchPlugin() {
|
|
31
|
+
return {
|
|
32
|
+
name: 'fullstack-vite-client-patch',
|
|
33
|
+
enforce: 'post',
|
|
34
|
+
apply: 'serve',
|
|
35
|
+
transform(code, id) {
|
|
36
|
+
if (!id.includes('vite/dist/client/client.mjs')) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!RECONNECT_RELOAD_PATTERN.test(code)) {
|
|
40
|
+
console.warn('[fullstack-vite-client-patch] Warning: Could not find the reconnect-reload pattern ' +
|
|
41
|
+
'in @vite/client. The patch has NOT been applied. ' +
|
|
42
|
+
'Check if this Vite version changed the vite:ws:disconnect handler.');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// Remove location.reload() — suppress auto-reload after WS reconnect.
|
|
46
|
+
// In cloud environments, the browser's stale HTTP/2 connection causes ~18s timeout on reload.
|
|
47
|
+
// Users can manually refresh when needed.
|
|
48
|
+
const patchedCode = code.replace(RECONNECT_RELOAD_PATTERN, (_, pingLine) => pingLine);
|
|
49
|
+
return { code: patchedCode };
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=vite-client-patch-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-client-patch-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/vite-client-patch-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAYH,sDA+BC;AAvCD;;;;GAIG;AACH,MAAM,wBAAwB,GAC5B,4EAA4E,CAAC;AAE/E,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,OAAO;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CACV,qFAAqF;oBACnF,mDAAmD;oBACnD,oEAAoE,CACvE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,sEAAsE;YACtE,8FAA8F;YAC9F,0CAA0C;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC9B,wBAAwB,EACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAC1B,CAAC;YAEF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/fullstack-vite-preset",
|
|
3
|
-
"version": "1.0.9-alpha.
|
|
3
|
+
"version": "1.0.9-alpha.4",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib",
|
|
6
6
|
"src/empty.css",
|
|
@@ -34,15 +34,19 @@
|
|
|
34
34
|
"@babel/traverse": "^7.28.0",
|
|
35
35
|
"@babel/types": "^7.28.2",
|
|
36
36
|
"@lark-apaas/devtool-kits": "^1.2.18",
|
|
37
|
+
"@lark-apaas/styled-jsx": "^1.0.1",
|
|
37
38
|
"@lark-apaas/vite-inspector-plugin": "^1.0.2",
|
|
38
39
|
"@vitejs/plugin-react": "^4.5.0",
|
|
39
40
|
"clsx": "^2.1.1",
|
|
40
41
|
"colorjs.io": "^0.5.2",
|
|
42
|
+
"core-js": "^3.40.0",
|
|
41
43
|
"dotenv": "^16.4.5",
|
|
42
44
|
"echarts": "^6.0.0",
|
|
43
45
|
"echarts-for-react": "^3.0.2",
|
|
44
46
|
"glob": "^11.0.0",
|
|
45
47
|
"html-minifier-terser": "^7.2.0",
|
|
48
|
+
"lightningcss": "^1.28.0",
|
|
49
|
+
"magic-string": "~0.30.18",
|
|
46
50
|
"postcss-import": "^16.1.1",
|
|
47
51
|
"styled-jsx": "^5.1.6",
|
|
48
52
|
"tailwind-merge": "^2.5.5",
|
package/src/overlay/index.js
CHANGED
|
@@ -145,24 +145,6 @@ function removeAllChildren(element, skip) {
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
function getParentOriginFromParams() {
|
|
149
|
-
try {
|
|
150
|
-
var params = new URLSearchParams(window.location.search);
|
|
151
|
-
var origin = params.get('__parentOrigin');
|
|
152
|
-
if (origin) {
|
|
153
|
-
sessionStorage.setItem('__parentOrigin', origin);
|
|
154
|
-
return origin;
|
|
155
|
-
}
|
|
156
|
-
} catch (e) {
|
|
157
|
-
// ignore
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
return sessionStorage.getItem('__parentOrigin') || '';
|
|
161
|
-
} catch (e) {
|
|
162
|
-
return '';
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
148
|
function getLegacyParentOrigin() {
|
|
167
149
|
const currentOrigin = window.location?.origin || '';
|
|
168
150
|
if (currentOrigin.includes('force.feishuapp.net')) {
|
|
@@ -185,7 +167,7 @@ function getLegacyParentOrigin() {
|
|
|
185
167
|
|
|
186
168
|
function sendPostMessage(message, targetOrigin) {
|
|
187
169
|
try {
|
|
188
|
-
const parentOrigin =
|
|
170
|
+
const parentOrigin = process?.env?.FORCE_FRAMEWORK_DOMAIN_MAIN || getLegacyParentOrigin();
|
|
189
171
|
const origin = targetOrigin || parentOrigin;
|
|
190
172
|
window.parent.postMessage(message, origin);
|
|
191
173
|
} catch (error) {
|
|
@@ -120,24 +120,6 @@ if (!window.__VITE_ERROR_OVERLAY_INITIALIZED__) {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
// ===== PostMessage 通信 (与 rspack 对齐) =====
|
|
123
|
-
function getParentOriginFromParams() {
|
|
124
|
-
try {
|
|
125
|
-
var params = new URLSearchParams(window.location.search);
|
|
126
|
-
var origin = params.get('__parentOrigin');
|
|
127
|
-
if (origin) {
|
|
128
|
-
sessionStorage.setItem('__parentOrigin', origin);
|
|
129
|
-
return origin;
|
|
130
|
-
}
|
|
131
|
-
} catch (e) {
|
|
132
|
-
// ignore
|
|
133
|
-
}
|
|
134
|
-
try {
|
|
135
|
-
return sessionStorage.getItem('__parentOrigin') || '';
|
|
136
|
-
} catch (e) {
|
|
137
|
-
return '';
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
123
|
function getLegacyParentOrigin() {
|
|
142
124
|
const currentOrigin = window.location?.origin || '';
|
|
143
125
|
if (currentOrigin.includes('force.feishuapp.net')) {
|
|
@@ -160,7 +142,7 @@ if (!window.__VITE_ERROR_OVERLAY_INITIALIZED__) {
|
|
|
160
142
|
|
|
161
143
|
function sendPostMessage(message, targetOrigin) {
|
|
162
144
|
try {
|
|
163
|
-
const parentOrigin =
|
|
145
|
+
const parentOrigin = process.env.FORCE_FRAMEWORK_DOMAIN_MAIN || getLegacyParentOrigin();
|
|
164
146
|
const origin = targetOrigin || parentOrigin;
|
|
165
147
|
window.parent.postMessage(message, origin);
|
|
166
148
|
} catch (error) {
|