@lark-apaas/coding-vite-preset 1.0.11 → 1.0.12
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.
|
@@ -2,21 +2,7 @@ import type { Plugin } from 'vite';
|
|
|
2
2
|
export interface CapabilitiesPluginOptions {
|
|
3
3
|
/** 覆盖扫描目录(相对项目根)。不传按 DEFAULT_DIRS 依次扫描。 */
|
|
4
4
|
dir?: string;
|
|
5
|
-
/**
|
|
6
|
-
* 注入下游 Vite 主版本号,跳过自动探测。仅供单测覆盖 Vite < 8 / Vite 8+
|
|
7
|
-
* 两条 depOptimizer 分支用,**生产代码不应该传**。
|
|
8
|
-
*/
|
|
9
|
-
_viteMajorOverride?: number | null;
|
|
10
5
|
}
|
|
11
|
-
/**
|
|
12
|
-
* 检测当前下游 Vite 是不是 8+。Vite 8 在 `optimizeDeps.esbuildOptions` 非空时
|
|
13
|
-
* 会打 deprecation warn,且把 plugins 自动合到 rolldown.plugins 末尾;既然
|
|
14
|
-
* rolldown 路径已经独立挂了,Vite 8+ 上跳过 esbuild 路径避免污染输出。
|
|
15
|
-
*
|
|
16
|
-
* package 用 CommonJS 模块(tsc emit),直接 require vite/package.json;读不到
|
|
17
|
-
* 时保守按 < 8 处理(多挂 esbuild 不影响低版本正确性)。
|
|
18
|
-
*/
|
|
19
|
-
export declare function detectViteMajor(): number | null;
|
|
20
6
|
/**
|
|
21
7
|
* 把业务工程 `<dir>/*.json` 的 capability 配置打成 `virtual:capabilities`
|
|
22
8
|
* 虚拟模块。
|
|
@@ -28,17 +14,25 @@ export declare function detectViteMajor(): number | null;
|
|
|
28
14
|
*
|
|
29
15
|
* ✘ [ERROR] Could not resolve "virtual:capabilities"
|
|
30
16
|
* node_modules/@lark-apaas/client-capability/dist/index.js:285:35
|
|
31
|
-
* Error during dependency optimization
|
|
32
17
|
*
|
|
33
|
-
*
|
|
34
|
-
* 1. Vite 主 pipeline `resolveId` / `load`
|
|
35
|
-
* 2.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
18
|
+
* 解析挂两处:
|
|
19
|
+
* 1. Vite 主 pipeline `resolveId` / `load` —— dev 运行时 + production build 都走它。
|
|
20
|
+
* 2. depOptimizer 里把 `virtual:capabilities` 标记为 **external**
|
|
21
|
+
* (`optimizeDeps.exclude`),让被预打包的依赖(client-capability,内联进
|
|
22
|
+
* client-toolkit)保留运行时 `import 'virtual:capabilities'`,交给上面的主
|
|
23
|
+
* pipeline 动态解析。
|
|
38
24
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
25
|
+
* 为什么 depOptimizer 走 external 而不是在优化器里解析 + 内联(旧实现注入
|
|
26
|
+
* rolldownOptions.plugins / esbuildOptions.plugins):内联会把 map 烤成 optimize
|
|
27
|
+
* 那一刻的快照固化进预打包 chunk。dev 期新增 / 修改 capability JSON 后,
|
|
28
|
+
* configureServer 的 invalidateModule + full-reload 作用在主 pipeline 的虚拟模块
|
|
29
|
+
* 上,而预打包消费者读的是 chunk 里那份内联快照 —— 两者不是同一个模块,watch
|
|
30
|
+
* 永远刷不到(实测:inline 模式 getModuleById(RESOLVED) 返回 null,invalidate 是
|
|
31
|
+
* no-op;若首屏 optimize 时目录还空,map 会一直空,只有重启 / re-optimize 才更新)。
|
|
32
|
+
* external 后虚拟模块进入运行时模块图,configureServer 的 invalidate + full-reload
|
|
33
|
+
* 才真正命中被读的模块、即时刷新。external 同时天然跳过"优化器解析失败"问题
|
|
34
|
+
* (标记 external 后优化器不再尝试解析它),且对 esbuild(Vite < 8)/ rolldown
|
|
35
|
+
* (Vite 8+)两种 depOptimizer 都生效,无需再按 Vite 版本分叉。
|
|
42
36
|
*/
|
|
43
37
|
export declare function capabilitiesPlugin(options?: CapabilitiesPluginOptions): Plugin;
|
|
44
38
|
export default capabilitiesPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities-plugin.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAWnC,MAAM,WAAW,yBAAyB;IACxC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAyElF;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -33,37 +33,16 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.detectViteMajor = detectViteMajor;
|
|
37
36
|
exports.capabilitiesPlugin = capabilitiesPlugin;
|
|
38
37
|
const fs = __importStar(require("node:fs"));
|
|
39
38
|
const path = __importStar(require("node:path"));
|
|
40
39
|
const VIRTUAL_ID = 'virtual:capabilities';
|
|
41
40
|
const RESOLVED = '\0' + VIRTUAL_ID;
|
|
42
|
-
const ESBUILD_NAMESPACE = 'miaoda-virtual-capabilities';
|
|
43
41
|
// fullstack 模板把 capability JSON 放在 `server/capabilities`。
|
|
44
42
|
// 同时兼容老 jsPage 风格 `shared/capabilities`,两个目录都扫;
|
|
45
43
|
// 都不存在就注册空 map(必须存在,否则下游 client-capability dist 里的
|
|
46
44
|
// `import 'virtual:capabilities'` 解不掉,Vite 直接 fail)。
|
|
47
45
|
const DEFAULT_DIRS = ['server/capabilities', 'shared/capabilities'];
|
|
48
|
-
/**
|
|
49
|
-
* 检测当前下游 Vite 是不是 8+。Vite 8 在 `optimizeDeps.esbuildOptions` 非空时
|
|
50
|
-
* 会打 deprecation warn,且把 plugins 自动合到 rolldown.plugins 末尾;既然
|
|
51
|
-
* rolldown 路径已经独立挂了,Vite 8+ 上跳过 esbuild 路径避免污染输出。
|
|
52
|
-
*
|
|
53
|
-
* package 用 CommonJS 模块(tsc emit),直接 require vite/package.json;读不到
|
|
54
|
-
* 时保守按 < 8 处理(多挂 esbuild 不影响低版本正确性)。
|
|
55
|
-
*/
|
|
56
|
-
function detectViteMajor() {
|
|
57
|
-
try {
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
59
|
-
const pkg = require('vite/package.json');
|
|
60
|
-
const major = parseInt(String(pkg.version ?? '').split('.')[0] ?? '', 10);
|
|
61
|
-
return Number.isFinite(major) ? major : null;
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
46
|
/**
|
|
68
47
|
* 把业务工程 `<dir>/*.json` 的 capability 配置打成 `virtual:capabilities`
|
|
69
48
|
* 虚拟模块。
|
|
@@ -75,17 +54,25 @@ function detectViteMajor() {
|
|
|
75
54
|
*
|
|
76
55
|
* ✘ [ERROR] Could not resolve "virtual:capabilities"
|
|
77
56
|
* node_modules/@lark-apaas/client-capability/dist/index.js:285:35
|
|
78
|
-
* Error during dependency optimization
|
|
79
57
|
*
|
|
80
|
-
*
|
|
81
|
-
* 1. Vite 主 pipeline `resolveId` / `load`
|
|
82
|
-
* 2.
|
|
83
|
-
*
|
|
84
|
-
*
|
|
58
|
+
* 解析挂两处:
|
|
59
|
+
* 1. Vite 主 pipeline `resolveId` / `load` —— dev 运行时 + production build 都走它。
|
|
60
|
+
* 2. depOptimizer 里把 `virtual:capabilities` 标记为 **external**
|
|
61
|
+
* (`optimizeDeps.exclude`),让被预打包的依赖(client-capability,内联进
|
|
62
|
+
* client-toolkit)保留运行时 `import 'virtual:capabilities'`,交给上面的主
|
|
63
|
+
* pipeline 动态解析。
|
|
85
64
|
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
65
|
+
* 为什么 depOptimizer 走 external 而不是在优化器里解析 + 内联(旧实现注入
|
|
66
|
+
* rolldownOptions.plugins / esbuildOptions.plugins):内联会把 map 烤成 optimize
|
|
67
|
+
* 那一刻的快照固化进预打包 chunk。dev 期新增 / 修改 capability JSON 后,
|
|
68
|
+
* configureServer 的 invalidateModule + full-reload 作用在主 pipeline 的虚拟模块
|
|
69
|
+
* 上,而预打包消费者读的是 chunk 里那份内联快照 —— 两者不是同一个模块,watch
|
|
70
|
+
* 永远刷不到(实测:inline 模式 getModuleById(RESOLVED) 返回 null,invalidate 是
|
|
71
|
+
* no-op;若首屏 optimize 时目录还空,map 会一直空,只有重启 / re-optimize 才更新)。
|
|
72
|
+
* external 后虚拟模块进入运行时模块图,configureServer 的 invalidate + full-reload
|
|
73
|
+
* 才真正命中被读的模块、即时刷新。external 同时天然跳过"优化器解析失败"问题
|
|
74
|
+
* (标记 external 后优化器不再尝试解析它),且对 esbuild(Vite < 8)/ rolldown
|
|
75
|
+
* (Vite 8+)两种 depOptimizer 都生效,无需再按 Vite 版本分叉。
|
|
89
76
|
*/
|
|
90
77
|
function capabilitiesPlugin(options = {}) {
|
|
91
78
|
let rootDir = process.cwd();
|
|
@@ -119,47 +106,14 @@ function capabilitiesPlugin(options = {}) {
|
|
|
119
106
|
configResolved(config) {
|
|
120
107
|
rootDir = config.root;
|
|
121
108
|
},
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (source === VIRTUAL_ID)
|
|
129
|
-
return RESOLVED;
|
|
130
|
-
return null;
|
|
131
|
-
},
|
|
132
|
-
load(id) {
|
|
133
|
-
if (id !== RESOLVED)
|
|
134
|
-
return null;
|
|
135
|
-
return renderMap();
|
|
109
|
+
// depOptimizer 把 virtual:capabilities 标记为 external,预打包依赖保留运行时
|
|
110
|
+
// import,由下面的 resolveId/load 动态解析。详见函数顶部注释。
|
|
111
|
+
config() {
|
|
112
|
+
return {
|
|
113
|
+
optimizeDeps: {
|
|
114
|
+
exclude: [VIRTUAL_ID],
|
|
136
115
|
},
|
|
137
116
|
};
|
|
138
|
-
const optimizeDeps = {
|
|
139
|
-
// Vite 8 Rolldown depOptimizer:API 跟 rollup/rolldown 一致。
|
|
140
|
-
// 当前 Vite 类型还没覆盖,as any 绕过。
|
|
141
|
-
rolldownOptions: { plugins: [rolldownPlugin] },
|
|
142
|
-
};
|
|
143
|
-
const viteMajor = options._viteMajorOverride !== undefined
|
|
144
|
-
? options._viteMajorOverride
|
|
145
|
-
: detectViteMajor();
|
|
146
|
-
const isVite8Plus = viteMajor !== null && viteMajor >= 8;
|
|
147
|
-
if (!isVite8Plus) {
|
|
148
|
-
// Vite < 8:默认 esbuild depOptimizer,plugin API 用 setup + onResolve/onLoad
|
|
149
|
-
// + namespace,跟 rollup 的 resolveId/load 不同。
|
|
150
|
-
optimizeDeps.esbuildOptions = {
|
|
151
|
-
plugins: [
|
|
152
|
-
{
|
|
153
|
-
name: 'miaoda-capabilities-esbuild',
|
|
154
|
-
setup(build) {
|
|
155
|
-
build.onResolve({ filter: /^virtual:capabilities$/ }, () => ({ path: VIRTUAL_ID, namespace: ESBUILD_NAMESPACE }));
|
|
156
|
-
build.onLoad({ filter: /.*/, namespace: ESBUILD_NAMESPACE }, () => ({ contents: renderMap(), loader: 'js' }));
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
],
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
return { optimizeDeps };
|
|
163
117
|
},
|
|
164
118
|
resolveId(id) {
|
|
165
119
|
if (id === VIRTUAL_ID)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"capabilities-plugin.js","sourceRoot":"","sources":["../../src/vite-plugins/capabilities-plugin.ts"],"names":[],"mappings":"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"}
|