@nasti-toolchain/nasti 2.3.1 → 2.4.1
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/README.md +97 -1
- package/bin/nasti.js +0 -0
- package/client/hmr.ts +4 -3
- package/dist/cli.cjs +1896 -583
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1891 -575
- package/dist/cli.js.map +1 -1
- package/dist/client/hmr.cjs.map +1 -1
- package/dist/client/hmr.d.cts +4 -3
- package/dist/client/hmr.d.ts +4 -3
- package/dist/index.cjs +1810 -497
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +233 -18
- package/dist/index.d.ts +233 -18
- package/dist/index.js +1810 -494
- package/dist/index.js.map +1 -1
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
|
|
32
32
|
## Quick Start
|
|
33
33
|
|
|
34
|
+
Requires Node.js `^20.19.0` or `>=22.12.0`.
|
|
35
|
+
|
|
34
36
|
```bash
|
|
35
37
|
# 安装
|
|
36
38
|
npm install -D @nasti-toolchain/nasti
|
|
@@ -303,7 +305,101 @@ export default defineConfig({
|
|
|
303
305
|
|
|
304
306
|
bridge 插件通过 `createEnvironmentDriver()` 提供 `build`、`serve`、`watchChange`
|
|
305
307
|
和 `close`,并可使用 `setup(api)`、`api.expose/useExposed` 与
|
|
306
|
-
`afterBuildApp()` 协调多个插件或环境。
|
|
308
|
+
`afterBuildApp(results, api, context)` 协调多个插件或环境。
|
|
309
|
+
|
|
310
|
+
## 原生多环境聚合(Lynx BG / MT)
|
|
311
|
+
|
|
312
|
+
纯 Lynx 应用可以禁用默认 Web client,把同一入口交给两套独立的 client-consumer
|
|
313
|
+
Rolldown 环境。每套环境都有独立 module graph、resolve conditions、插件上下文和输出目录:
|
|
314
|
+
|
|
315
|
+
```ts
|
|
316
|
+
export default defineConfig({
|
|
317
|
+
environments: {
|
|
318
|
+
client: { buildEnabled: false },
|
|
319
|
+
'lynx-background': {
|
|
320
|
+
consumer: 'client',
|
|
321
|
+
entry: 'src/index.ts',
|
|
322
|
+
resolve: { conditions: ['lynx-background', 'browser', 'import'] },
|
|
323
|
+
},
|
|
324
|
+
'lynx-main-thread': {
|
|
325
|
+
consumer: 'client',
|
|
326
|
+
entry: 'src/index.ts',
|
|
327
|
+
resolve: { conditions: ['lynx-main-thread', 'browser', 'import'] },
|
|
328
|
+
build: {
|
|
329
|
+
target: 'es2019',
|
|
330
|
+
// 保留 CSS 模块图与 chunk 所有权,但不生成浏览器副作用/文件。
|
|
331
|
+
css: { inject: false, emit: false },
|
|
332
|
+
},
|
|
333
|
+
vue: {
|
|
334
|
+
template: { compilerOptions: { whitespace: 'condense' } },
|
|
335
|
+
transformTemplate(source, context) {
|
|
336
|
+
return transformLynxTemplate(source, context.environmentName)
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
plugins: [pluginVueLynxNative()],
|
|
342
|
+
})
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Environment API 是 `conditionNames` 和 `mainFields` 的唯一高层配置入口:
|
|
346
|
+
请使用 `environments.<name>.resolve.conditions` / `mainFields`(client 也可使用
|
|
347
|
+
top-level `resolve`)。这些值会无条件覆盖
|
|
348
|
+
`build.rolldownOptions.resolve.conditionNames` / `mainFields` 中的对应底层选项。
|
|
349
|
+
|
|
350
|
+
生产与 dev 插件钩子的 `this.environment` 都会准确指向当前 BG/MT 环境。
|
|
351
|
+
每个 client-consumer 环境拥有独立的 module graph、transform 缓存和命名 HMR
|
|
352
|
+
通道;工具链可以调用 `server.transformEnvironmentRequest(name, url)`(或
|
|
353
|
+
`server.environments[name].transformRequest(url)`)取得特定环境的转换结果。
|
|
354
|
+
`handleHotUpdateApp` 在一个文件完成所有环境的失效与重转后只调用一次:
|
|
355
|
+
|
|
356
|
+
```ts
|
|
357
|
+
const pluginVueLynxNative = () => ({
|
|
358
|
+
name: 'vue-lynx:native',
|
|
359
|
+
|
|
360
|
+
async handleHotUpdateApp({ environments }) {
|
|
361
|
+
for (const [name, update] of Object.entries(environments)) {
|
|
362
|
+
await reencodeAffectedSections(name, update.transformed)
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
})
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
CSS 原文/转换结果可从 `environment.getCssModule(id)` /
|
|
369
|
+
`environment.getCssModules()` 读取,无需解析浏览器 `<style>` 注入代码。
|
|
370
|
+
生产插件还可登记结构化 manifest,并在 app 级 finalizer 中直接查询
|
|
371
|
+
entry、chunk、CSS、asset 和 source map,最后写出聚合 bundle:
|
|
372
|
+
|
|
373
|
+
```ts
|
|
374
|
+
const pluginVueLynxNative = () => ({
|
|
375
|
+
name: 'vue-lynx:native',
|
|
376
|
+
|
|
377
|
+
generateBundle() {
|
|
378
|
+
this.environment.setBuildMetadata({
|
|
379
|
+
manifest: { thread: this.environment.name },
|
|
380
|
+
})
|
|
381
|
+
},
|
|
382
|
+
|
|
383
|
+
afterBuildApp(_results, _api, app) {
|
|
384
|
+
const background = app.getEntry('lynx-background', 'index')
|
|
385
|
+
const mainThread = app.getEntry('lynx-main-thread', 'index')
|
|
386
|
+
if (!background || !mainThread) throw new Error('Missing Lynx thread entry')
|
|
387
|
+
|
|
388
|
+
app.emitFile({
|
|
389
|
+
type: 'asset',
|
|
390
|
+
fileName: 'main.native.lynx.bundle',
|
|
391
|
+
source: encodeLynxBundle({ background, mainThread }),
|
|
392
|
+
})
|
|
393
|
+
},
|
|
394
|
+
})
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
`build()` 的 `environmentResults` 会包含原生环境自动推导的 `entries`、插件登记的
|
|
398
|
+
`manifest/stats`、`chunks/assets/css/sourceMaps` 及完整 `output`;对应的
|
|
399
|
+
`BuildAppContext.getChunk/getCss/getSourceMap/resolvePublicPath` 可跨环境关联初始与
|
|
400
|
+
lazy chunk。app 级产物同时出现在 `BuildResult.appOutput`。高层
|
|
401
|
+
`environments.<name>.build.target` 会同时应用于 OXC 的 TS/JSX 转换和 Rolldown
|
|
402
|
+
的最终输出,无需再设置底层 `rolldownOptions.transform.target`。
|
|
307
403
|
|
|
308
404
|
## Monaco Editor 支持
|
|
309
405
|
|
package/bin/nasti.js
CHANGED
|
File without changes
|
package/client/hmr.ts
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
export interface HotModule {
|
|
5
5
|
accept(cb?: (mod: any) => void): void
|
|
6
|
+
accept(dep: string, cb: (mod: any) => void): void
|
|
6
7
|
accept(deps: string[], cb: (mods: any[]) => void): void
|
|
7
|
-
dispose(cb: (data: any) => void): void
|
|
8
|
-
prune(cb: () => void): void
|
|
9
|
-
invalidate(): void
|
|
8
|
+
dispose(cb: (data: Record<string, any>) => void | Promise<void>): void
|
|
9
|
+
prune(cb: (data: Record<string, any>) => void | Promise<void>): void
|
|
10
|
+
invalidate(message?: string): void
|
|
10
11
|
data: Record<string, any>
|
|
11
12
|
}
|
|
12
13
|
|