
























@@ -11,6 +11,10 @@ const repoRoot = path.resolve(here, "..");
1111const outDir = path.resolve(here, "../dist/control-ui");
1212const require = createRequire(import.meta.url);
1313const json5EsmPath = require.resolve("json5/dist/index.mjs");
14+type ControlUiViteAlias = {
15+find: string | RegExp;
16+replacement: string;
17+};
1418const commonJsOptimizeDeps = [
1519"highlight.js/lib/core",
1620"highlight.js/lib/languages/bash",
@@ -83,6 +87,72 @@ function resolveControlUiBuildId(): string {
8387return normalizeBuildId(gitSha ? `${version}-${gitSha}` : version);
8488}
858990+function escapeRegExp(input: string): string {
91+return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
92+}
93+94+function sortTsconfigPathEntries(entries: Array<[string, unknown]>): Array<[string, unknown]> {
95+return entries.toSorted(([left], [right]) => {
96+const leftPrefixLength = left.includes("*") ? left.indexOf("*") : left.length;
97+const rightPrefixLength = right.includes("*") ? right.indexOf("*") : right.length;
98+if (leftPrefixLength !== rightPrefixLength) {
99+return rightPrefixLength - leftPrefixLength;
100+}
101+return right.length - left.length || left.localeCompare(right);
102+});
103+}
104+105+function resolveTsconfigTargetPath(target: string): string {
106+return path.resolve(repoRoot, target.replace(/^\.\//, ""));
107+}
108+109+function resolveTsconfigPathAlias(key: string, target: string): ControlUiViteAlias | null {
110+const keyWildcardIndex = key.indexOf("*");
111+const targetWildcardIndex = target.indexOf("*");
112+if (keyWildcardIndex === -1 || targetWildcardIndex === -1) {
113+if (keyWildcardIndex !== -1 || targetWildcardIndex !== -1) {
114+return null;
115+}
116+return {
117+find: key,
118+replacement: resolveTsconfigTargetPath(target),
119+};
120+}
121+122+if (
123+key.indexOf("*", keyWildcardIndex + 1) !== -1 ||
124+target.indexOf("*", targetWildcardIndex + 1) !== -1
125+) {
126+return null;
127+}
128+129+const prefix = key.slice(0, keyWildcardIndex);
130+const suffix = key.slice(keyWildcardIndex + 1);
131+return {
132+find: new RegExp(`^${escapeRegExp(prefix)}(.+)${escapeRegExp(suffix)}$`),
133+replacement: resolveTsconfigTargetPath(target).replace("*", "$1"),
134+};
135+}
136+137+export function resolveTsconfigPathAliasesForVite(): ControlUiViteAlias[] {
138+const raw = fs.readFileSync(path.join(repoRoot, "tsconfig.json"), "utf8");
139+const parsed = JSON.parse(raw) as {
140+compilerOptions?: { paths?: Record<string, unknown> };
141+};
142+const paths = parsed.compilerOptions?.paths;
143+if (!paths) {
144+return [];
145+}
146+147+return sortTsconfigPathEntries(Object.entries(paths)).flatMap(([key, targets]) => {
148+if (!Array.isArray(targets) || typeof targets[0] !== "string") {
149+return [];
150+}
151+const alias = resolveTsconfigPathAlias(key, targets[0]);
152+return alias ? [alias] : [];
153+});
154+}
155+86156function controlUiServiceWorkerBuildIdPlugin(buildId: string): Plugin {
87157return {
88158name: "control-ui-service-worker-build-id",
@@ -121,9 +191,7 @@ export default defineConfig(() => {
121191],
122192},
123193resolve: {
124-alias: {
125-json5: json5EsmPath,
126-},
194+alias: [{ find: "json5", replacement: json5EsmPath }, ...resolveTsconfigPathAliasesForVite()],
127195},
128196build: {
129197 outDir,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。