配置参考

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: [],
})

通用选项

选项类型默认值说明
rootstring'.'项目根目录
basestring'/'公共基础路径
modestring'development'运行模式
target'web' | 'electron''web'打包目标平台,详见 Electron
framework'react' | 'vue' | 'auto''auto'框架类型;auto 会根据 src/**/*.vue 与 package.json 依赖解析为具体框架
logLevel'info' | 'warn' | 'error' | 'silent''info'日志级别
envPrefixstring | string[]['NASTI_', 'VITE_']暴露给客户端的环境变量前缀
pluginsNastiPlugin[][]插件列表

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
entrystring | string[]显式构建入口;client 未设置时从 HTML 提取
htmlstringclient HTML 入口,默认 index.html
driverstring由插件 createEnvironmentDriver 提供的外部编译驱动
resolveResolveConfig环境级解析覆盖
buildBuildConfig环境级构建覆盖
vueVueEnvironmentOptionsVue SFC 编译选项;features.vapor 可强制启用 Vue 3.6 Vapor Mode(测试版),详见 Vue

resolve 选项

选项类型默认值说明
aliasRecord<string, string>{}路径别名
extensionsstring[]['.ts', '.tsx', ...]导入时省略的扩展名
conditionsstring[]['import', 'module', ...]package.json exports 条件
mainFieldsstring[]['module', 'main']package.json 入口字段

server 选项

选项类型默认值说明
portnumber3000端口号
hoststring | boolean'localhost'监听地址,true 表示 0.0.0.0
httpsbooleanfalse是否启用 HTTPS
openboolean | stringfalse自动打开浏览器
corsbooleantrue是否启用 CORS
hmrboolean | HmrConfigtrueHMR 配置

build 选项

选项类型默认值说明
outDirstring'dist'输出目录
assetsDirstring'assets'资源子目录
minifyboolean | 'oxc' | 'dce-only' | objecttrue产物压缩(OXC Minifier)。传对象可细控 compress / mangle / codegen:mangle.keepNames.class 控制类名最小化,mangleProps 按正则最小化属性名(Rolldown 1.2.6 · OXC 0.147 新增)。详见下方示例
sourcemapboolean | 'inline' | 'hidden'falseSource map
targetstring'es2022'构建目标
emptyOutDirbooleantrue构建前清空输出目录
rolldownOptionsobject{}透传给 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 指南。

选项类型默认值说明
mainstring'src/electron/main.ts'主进程入口
preloadstring | string[]'src/electron/preload.ts'Preload 脚本,可多入口
rendererstring'index.html'渲染进程入口 HTML
mainFormat'cjs' | 'esm''cjs'主进程输出格式(ESM 需 Electron 41+)
preloadFormat'cjs' | 'esm''cjs'Preload 输出格式
nodeTargetstring'node22'主/preload 的 Node 版本目标
autoRestartbooleantruedev 模式下自动重启 Electron
minVersionnumber41允许的最低 Electron 大版本
electronPathstring''自定义 Electron 可执行文件路径
electronArgsstring[][]传递给 Electron 的 CLI 参数
externalstring[]['electron']主/preload 外部化依赖