配置选项参考

CLI 选项

选项短选项类型默认值说明
--out-oStringdist输出目录
--minify-mBooleanfalse启用 Terser 压缩
--no-cache-CBooleanfalse禁用文件系统缓存
--source-map-sBooleanfalse生成 Source Map
--asset-builds-aBooleanfalse递归编译 JS 资源文件
--no-source-map-registerBooleanfalse不注入 source-map-support
--external-eString[][]排除指定模块(可多次使用)
--quiet-qBooleanfalse静默模式
--watch-wBooleanfalse启用 watch 模式
--transpile-only-tBooleanfalseTypeScript 仅转译
--v8-cacheBooleanfalse生成 V8 编译缓存
--licenseString''许可信息输出文件名
--stats-outStringWebpack stats JSON 输出路径
--targetStringes2015ECMAScript 目标版本
--debug-dBooleanfalse显示调试日志

API 选项

require('@vercel/ncc')(entry, options)
选项类型默认值说明
cachestring | false自动缓存目录路径,或 false 禁用
customEmitfunctionundefined自定义资源发射函数
esmboolean自动检测强制 ESM/CJS 输出
externalsstring[] | object[]外部模块
filenamestring'index.js'输出文件名
minifybooleanfalseTerser 压缩
sourceMapbooleanfalseSource Map
sourceMapRegisterbooleantrue注入 source-map-support
sourceMapBasePrefixstring'../'Source Map 路径前缀
assetBuildsbooleanfalse递归资源编译
watchboolean | objectfalseWatch 模式
v8cachebooleanfalseV8 缓存
filterAssetBasestringprocess.cwd()资源过滤基础目录
existingAssetNamesstring[][]已存在的资源名列表
quietbooleanfalse静默模式
debugLogbooleanfalse调试日志
transpileOnlybooleanfalse仅转译 TypeScript
licensestring''许可文件名
targetstringundefinedES 目标(如 'es2015'
productionbooleantrue使用 production 条件
mainFieldsstring[]['main']package.json 字段优先级

选项详解

cache

  • false:完全禁用缓存
  • string:使用指定路径作为缓存目录
  • undefined(默认):使用 ~/.cache/ncc/<project-hash>

缓存基于 ncc 版本和入口文件路径的哈希值命名。版本升级后缓存自动失效。

esm

自动检测逻辑(src/index.js:40):

entry.endsWith('.mjs') || !entry.endsWith('.cjs') && hasTypeModule(entry)

手动设置可覆盖自动检测。ESM 模式会:

  • 使用 libraryTarget: 'module'
  • 启用 experiments.outputModule
  • 禁用 V8 缓存
  • 使用 import condition 解析依赖
  • 必要时生成 package.json 声明 "type": "module"

externals

三种格式:

// 数组格式:保留原始模块名
externals: ["fs", "path", "./config.json"]

// 对象格式:模块名映射
externals: { "old-module": "new-module" }

// 正则格式(对象中的键使用 /regex/ 语法)
externals: { "/caniuse-lite(/.*)/" : "caniuse-lite$1" }

target

传入值必须以 es 开头(如 es2015es2020)。映射到 Webpack 的 target 配置:

  • 设置时:["node14", target]
  • 未设置时:"node14"

watch

  • true:使用 Webpack 默认的文件监视
  • object:传入自定义 WatchFileSystem 实例

Watch 模式返回值不是 Promise,而是 { handler, rebuild, close } 对象。

customEmit

customEmit: (path, { id, isRequire }) => {
  // 返回 false 阻止资源发射
  // 返回 string 替换为自定义代码
  // 返回 undefined 使用默认行为
}

@vercel/webpack-asset-relocator-loader 调用,用于自定义资源处理逻辑。

filterAssetBase

限制资源输出的范围。只有位于此目录内的文件才会作为 asset 输出。超出此范围的文件引用会被忽略。

production

控制 Node.js 条件导出(conditional exports)中使用 "production" 还是 "development" 条件。默认 true 使用 production 条件。

环境变量

变量说明
TYPESCRIPT_LOOKUP_PATH覆盖 TypeScript 包查找路径
XDG_CACHE_HOME自定义缓存基础目录
__NCC_OPTS内部使用,传递选项给 loader