用途:ncc 是 @vercel/ncc,一个把 Node.js 模块连同其 node_modules 依赖打包成单个输出文件的简单 CLI。适合无服务器函数(部署单文件而非 node_modules)、CLI 工具(分发自包含可执行文件)以及 Docker 镜像(去除 node_modules 以减小体积)。
安装:npm install -g @vercel/ncc,或作为开发依赖 npm install --save-dev @vercel/ncc。
基本用法:ncc build input.js -o dist/ 将入口编译到 dist/;加 -w 进入监听模式;ncc run input.js 可不落盘直接运行。
主要 CLI 选项:-o/--out 指定输出目录(默认 dist);-m/--minify 压缩输出;-s/--source-map 生成 source map;-a/--asset-builds 递归构建嵌套 JS 资源;-e/--external 将模块保留为外部依赖不打包;-w/--watch 监听变更重建;-t/--transpile-only 跳过 TypeScript 类型检查;--license 输出许可证到文件;-q/--quiet 抑制非错误输出;--no-cache 跳过构建缓存;--no-asset-builds 跳过嵌套 JS 资源构建。
与 package.json 集成:可在 scripts 中配置 build、build:watch、start,并将 @vercel/ncc 列为 devDependencies。
TypeScript:原生支持,无需单独 tsc 步骤,可直接 ncc build src/index.ts -o dist/,并自动使用项目的 tsconfig.json;用 -t 可跳过类型检查加快构建。
外部依赖:对原生模块或可选依赖可用 -e 逐个标记为 external,例如 -e aws-sdk;在运行时已提供某些模块(如 AWS Lambda 的 aws-sdk)的无服务器环境中应标记为外部。
静态资源:ncc 会将 .json、.node、二进制等非 JS 资源复制到输出目录,运行时正确引用。
常见模式:无服务器函数可执行 ncc build api/handler.ts -o .output/ -m --no-cache;CLI 工具可在 package.json 的 bin 指向 dist/index.js 并用 prepublishOnly 触发构建;GitHub Actions 推荐用 ncc 打包为单文件,如 ncc build src/index.ts -o dist/ -m --license licenses.txt。
限制与注意:官方资料未提供关于价格、收费、云端服务或具体性能数据的信息;原生 .node 模块通常需设为 external;无配置文件,完全由 CLI 标志驱动。官方资源为 ncc GitHub 与 Vercel 博客。