@nasti-toolchain/nasti 2.2.0 → 2.4.0
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 +100 -1
- package/bin/nasti.js +0 -0
- package/client/hmr.ts +4 -3
- package/dist/cli.cjs +1480 -363
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1474 -358
- 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 +1581 -460
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +167 -13
- package/dist/index.d.ts +167 -13
- package/dist/index.js +1572 -455
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
- **Vite 插件兼容** - 直接使用现有 Vite/Rollup 插件(resolveId / load / transform)
|
|
24
24
|
- **内置 React 支持** - JSX 自动转换 + React Fast Refresh HMR
|
|
25
25
|
- **内置 Vue 支持** - SFC 编译 + Vue HMR(可选依赖 `@vue/compiler-sfc`)
|
|
26
|
-
- **Electron 41+ 支持** -
|
|
26
|
+
- **Electron 41+ 支持** - React/Vue renderer + 主进程 / Preload,支持 ESM 主进程
|
|
27
|
+
- **Environment Driver** - 可桥接 Rspeedy 等非 Rolldown 工具链,含 build/dev/watch 生命周期
|
|
27
28
|
- **Monaco Editor 集成** - 内置 `monacoEditorPlugin`,预打包 Web Worker,修复 HMR 期间的 EMFILE
|
|
28
29
|
- **Dev Server + HMR** - 开发服务器 + WebSocket 热模块替换
|
|
29
30
|
- **TypeScript 优先** - 原生 TS 支持,零配置
|
|
@@ -210,9 +211,11 @@ import { defineConfig } from '@nasti-toolchain/nasti'
|
|
|
210
211
|
|
|
211
212
|
export default defineConfig({
|
|
212
213
|
target: 'electron',
|
|
214
|
+
framework: 'auto', // 自动识别 React / Vue
|
|
213
215
|
electron: {
|
|
214
216
|
main: 'src/electron/main.ts', // 主进程入口
|
|
215
217
|
preload: 'src/electron/preload.ts', // Preload 脚本(可传数组)
|
|
218
|
+
renderer: 'src/renderer/index.html', // React / Vue renderer HTML
|
|
216
219
|
mainFormat: 'cjs', // 主进程输出格式:'cjs' | 'esm'
|
|
217
220
|
preloadFormat: 'cjs', // Preload 输出格式
|
|
218
221
|
nodeTarget: 'node22', // Electron 41 捆绑 Node 22
|
|
@@ -222,6 +225,19 @@ export default defineConfig({
|
|
|
222
225
|
})
|
|
223
226
|
```
|
|
224
227
|
|
|
228
|
+
Vue renderer 直接使用标准 SFC:
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
// src/renderer/main.ts
|
|
232
|
+
import { createApp } from 'vue'
|
|
233
|
+
import App from './App.vue'
|
|
234
|
+
|
|
235
|
+
createApp(App).mount('#app')
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
生产 renderer 默认使用 `base: './'`,因此 `BrowserWindow.loadFile()` 可以正确加载
|
|
239
|
+
hashed JS/CSS;显式配置其他 `base` 时保留用户值。
|
|
240
|
+
|
|
225
241
|
开发:
|
|
226
242
|
|
|
227
243
|
```bash
|
|
@@ -269,6 +285,89 @@ app.whenReady().then(createWindow)
|
|
|
269
285
|
|
|
270
286
|
> 详细说明见 [Electron 指南](https://nasti.zixiaolabs.com/pages/electron.html)。
|
|
271
287
|
|
|
288
|
+
## External Environment Driver
|
|
289
|
+
|
|
290
|
+
Rspeedy 等外部工具链可以接管单个环境,同时保留 Nasti 的 CLI、日志与多环境编排:
|
|
291
|
+
|
|
292
|
+
```ts
|
|
293
|
+
export default defineConfig({
|
|
294
|
+
environments: {
|
|
295
|
+
lynx: {
|
|
296
|
+
consumer: 'client',
|
|
297
|
+
driver: 'rspeedy',
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
plugins: [pluginRspeedyBridge()],
|
|
301
|
+
})
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
bridge 插件通过 `createEnvironmentDriver()` 提供 `build`、`serve`、`watchChange`
|
|
305
|
+
和 `close`,并可使用 `setup(api)`、`api.expose/useExposed` 与
|
|
306
|
+
`afterBuildApp(results, api, context)` 协调多个插件或环境。
|
|
307
|
+
|
|
308
|
+
## 原生多环境聚合(Lynx BG / MT)
|
|
309
|
+
|
|
310
|
+
纯 Lynx 应用可以禁用默认 Web client,把同一入口交给两套独立的 client-consumer
|
|
311
|
+
Rolldown 环境。每套环境都有独立 module graph、resolve conditions、插件上下文和输出目录:
|
|
312
|
+
|
|
313
|
+
```ts
|
|
314
|
+
export default defineConfig({
|
|
315
|
+
environments: {
|
|
316
|
+
client: { buildEnabled: false },
|
|
317
|
+
'lynx-background': {
|
|
318
|
+
consumer: 'client',
|
|
319
|
+
entry: 'src/index.ts',
|
|
320
|
+
resolve: { conditions: ['lynx-background', 'browser', 'import'] },
|
|
321
|
+
},
|
|
322
|
+
'lynx-main-thread': {
|
|
323
|
+
consumer: 'client',
|
|
324
|
+
entry: 'src/index.ts',
|
|
325
|
+
resolve: { conditions: ['lynx-main-thread', 'browser', 'import'] },
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
plugins: [pluginVueLynxNative()],
|
|
329
|
+
})
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Environment API 是 `conditionNames` 和 `mainFields` 的唯一高层配置入口:
|
|
333
|
+
请使用 `environments.<name>.resolve.conditions` / `mainFields`(client 也可使用
|
|
334
|
+
top-level `resolve`)。这些值会无条件覆盖
|
|
335
|
+
`build.rolldownOptions.resolve.conditionNames` / `mainFields` 中的对应底层选项。
|
|
336
|
+
|
|
337
|
+
在生产构建的 bundle/finalizer 相关钩子(如 `generateBundle`、`buildEnd`、
|
|
338
|
+
`closeBundle`)中,`this.environment` 会准确指向当前 BG/MT 环境。unbundled
|
|
339
|
+
dev 调用路径可能不提供该对象,开发期插件不得依赖 `this.environment`;应使用
|
|
340
|
+
Environment API 的显式环境参数。插件可登记结构化 manifest,并在 app 级
|
|
341
|
+
finalizer 中直接查询 entry/artifact,最后写出聚合 bundle:
|
|
342
|
+
|
|
343
|
+
```ts
|
|
344
|
+
const pluginVueLynxNative = () => ({
|
|
345
|
+
name: 'vue-lynx:native',
|
|
346
|
+
|
|
347
|
+
generateBundle() {
|
|
348
|
+
this.environment.setBuildMetadata({
|
|
349
|
+
manifest: { thread: this.environment.name },
|
|
350
|
+
})
|
|
351
|
+
},
|
|
352
|
+
|
|
353
|
+
afterBuildApp(_results, _api, app) {
|
|
354
|
+
const background = app.getEntry('lynx-background', 'index')
|
|
355
|
+
const mainThread = app.getEntry('lynx-main-thread', 'index')
|
|
356
|
+
if (!background || !mainThread) throw new Error('Missing Lynx thread entry')
|
|
357
|
+
|
|
358
|
+
app.emitFile({
|
|
359
|
+
type: 'asset',
|
|
360
|
+
fileName: 'main.native.lynx.bundle',
|
|
361
|
+
source: encodeLynxBundle({ background, mainThread }),
|
|
362
|
+
})
|
|
363
|
+
},
|
|
364
|
+
})
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
`build()` 的 `environmentResults` 会包含原生环境自动推导的 `entries`、插件登记的
|
|
368
|
+
`manifest/stats` 及完整 `output`;app 级产物同时出现在 `BuildResult.appOutput`。
|
|
369
|
+
这些 API 只负责双线程编排与聚合,Vue SFC/worklet、Lynx CSS 和 encoder 由后续工具链插件实现。
|
|
370
|
+
|
|
272
371
|
## Monaco Editor 支持
|
|
273
372
|
|
|
274
373
|
内置 `monacoEditorPlugin`(对标 `vite-plugin-monaco-editor`),解决两个老大难问题:
|
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
|
|