配置参考
Nasti 使用 nasti.config.ts(或 .js / .mjs)作为配置文件。
完整配置示例
import { defineConfig } from '@nasti-toolchain/nasti' export default defineConfig({ root: '.', base: '/', mode: 'development', framework: 'react', logLevel: 'info', envPrefix: ['NASTI_', 'VITE_'], resolve: { alias: { '@': '/src' }, extensions: ['.ts', '.tsx', '.js', '.jsx'], }, server: { port: 3000, host: true, open: true, cors: true, hmr: true, }, build: { outDir: 'dist', assetsDir: 'assets', sourcemap: true, minify: true, emptyOutDir: true, target: 'es2022', }, plugins: [], })
通用选项
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
root | string | '.' | 项目根目录 |
base | string | '/' | 公共基础路径 |
mode | string | 'development' | 运行模式 |
target | 'web' | 'electron' | 'web' | 打包目标平台,详见 Electron |
framework | 'react' | 'vue' | 'auto' | 'auto' | 框架类型;auto 会根据 src/**/*.vue 与 package.json 依赖解析为具体框架 |
logLevel | 'info' | 'warn' | 'error' | 'silent' | 'info' | 日志级别 |
envPrefix | string | string[] | ['NASTI_', 'VITE_'] | 暴露给客户端的环境变量前缀 |
plugins | NastiPlugin[] | [] | 插件列表 |
environments 选项
每个环境可使用内置 Rolldown 流水线,也可通过 driver 交给插件提供的
外部编译器。client 环境还可指定自定义 HTML 或直接入口。
export default defineConfig({ environments: { client: { html: 'src/renderer/index.html', }, lynx: { consumer: 'client', driver: 'rspeedy', }, }, })
| 选项 | 类型 | 说明 |
|---|---|---|
consumer | 'client' | 'server' | 决定解析条件和 import.meta.env.SSR |
entry | string | string[] | 显式构建入口;client 未设置时从 HTML 提取 |
html | string | client HTML 入口,默认 index.html |
driver | string | 由插件 createEnvironmentDriver 提供的外部编译驱动 |
resolve | ResolveConfig | 环境级解析覆盖 |
build | BuildConfig | 环境级构建覆盖 |
vue | VueEnvironmentOptions | Vue SFC 编译选项;features.vapor 可强制启用 Vue 3.6 Vapor Mode(测试版),详见 Vue |
resolve 选项
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alias | Record<string, string> | {} | 路径别名 |
extensions | string[] | ['.ts', '.tsx', ...] | 导入时省略的扩展名 |
conditions | string[] | ['import', 'module', ...] | package.json exports 条件 |
mainFields | string[] | ['module', 'main'] | package.json 入口字段 |
server 选项
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
port | number | 3000 | 端口号 |
host | string | boolean | 'localhost' | 监听地址,true 表示 0.0.0.0 |
https | boolean | false | 是否启用 HTTPS |
open | boolean | string | false | 自动打开浏览器 |
cors | boolean | true | 是否启用 CORS |
hmr | boolean | HmrConfig | true | HMR 配置 |
build 选项
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
outDir | string | 'dist' | 输出目录 |
assetsDir | string | 'assets' | 资源子目录 |
minify | boolean | 'oxc' | 'dce-only' | object | true | 产物压缩(OXC Minifier)。传对象可细控 compress / mangle / codegen:mangle.keepNames.class 控制类名最小化,mangleProps 按正则最小化属性名(Rolldown 1.2.6 · OXC 0.147 新增)。详见下方示例 |
sourcemap | boolean | 'inline' | 'hidden' | false | Source map |
target | string | 'es2022' | 构建目标 |
emptyOutDir | boolean | true | 构建前清空输出目录 |
rolldownOptions | object | {} | 透传给 Rolldown 的底层选项,用于手动控制 Tree-shaking(treeshake)与代码拆分(output.advancedChunks / output.codeSplitting)。详见下方示例 |
minify:类名与属性名最小化
build.minify 除 true / false / 'oxc' / 'dce-only' 外,还接受一个 OXC Minifier 选项对象(Rolldown 内置 OXC minifier)。历史值 'oxc' 等同于 true,保留用于兼容旧配置。默认情况下类名与函数名都会被最小化。
export default defineConfig({ build: { minify: { // 保留类名(依赖 Class.prototype.name 做注册 / 依赖注入的框架需要), // 函数名照常最小化 mangle: { keepNames: { class: true, function: false } }, // 属性名最小化 —— Rolldown 1.2.6 · OXC 0.147 新增。 // 与 mangle 平级:独立于标识符重命名之外单独处理属性名(含类成员) mangleProps: { include: /^_/, // 只压缩下划线前缀的「私有」属性 exclude: /^__/, // 排除双下划线约定 reserved: ['_id'], // 精确豁免 }, }, }, })
注意:mangleProps 只按名字匹配、不做类型分析。凡是被未压缩代码、模块命名空间、全局对象或宿主 API 持有的属性,都必须用 exclude / reserved 摘出去,否则访问路径会被改坏。仅支持最终生成一个 JavaScript chunk;分包产生多个 JS chunk 时 Rolldown 会报错。单入口可设置 build.rolldownOptions.output.codeSplitting: false 内联动态导入。
rolldownOptions:手动控制代码拆分与 Tree-shaking
生产应用常需手动分包(vendor / 按路由拆分)并精细化 Tree-shaking。rolldownOptions 的 input 侧选项(如 treeshake、resolve、external)会合并进 Rolldown,output 则合并进产物写出阶段(bundle.write())。注:input / plugins 由 Nasti 接管,output.dir 始终由 build.outDir 决定。
export default defineConfig({ build: { rolldownOptions: { // Tree-shaking(input 选项) treeshake: { moduleSideEffects: [{ test: /\/barrel\//, sideEffects: false }], }, // 代码拆分(output 选项) output: { advancedChunks: { groups: [ { name: 'react-vendor', test: /node_modules[\\/]react/, priority: 20 }, { name: 'vendor', test: /node_modules/, priority: 10 }, ], }, chunkFileNames: 'assets/chunks/[name].[hash].js', }, }, }, })
electron 选项
仅在 target: 'electron' 时生效,要求 Electron 41+。完整示例见 Electron 指南。
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
main | string | 'src/electron/main.ts' | 主进程入口 |
preload | string | string[] | 'src/electron/preload.ts' | Preload 脚本,可多入口 |
renderer | string | 'index.html' | 渲染进程入口 HTML |
mainFormat | 'cjs' | 'esm' | 'cjs' | 主进程输出格式(ESM 需 Electron 41+) |
preloadFormat | 'cjs' | 'esm' | 'cjs' | Preload 输出格式 |
nodeTarget | string | 'node22' | 主/preload 的 Node 版本目标 |
autoRestart | boolean | true | dev 模式下自动重启 Electron |
minVersion | number | 41 | 允许的最低 Electron 大版本 |
electronPath | string | '' | 自定义 Electron 可执行文件路径 |
electronArgs | string[] | [] | 传递给 Electron 的 CLI 参数 |
external | string[] | ['electron'] | 主/preload 外部化依赖 |