ncc
$
npx mdskill add openai/plugins/nccBundle Node.js apps into single files with all dependencies included.
- Eliminates node_modules for serverless functions, CLI tools, and Docker images.
- Integrates with npm, bun, yarn, and ncc build commands.
- Detects @vercel/ncc installation and usage patterns automatically.
- Outputs compiled JavaScript files ready for deployment or execution.
SKILL.md
.github/skills/nccView on GitHub ↗
---
name: ncc
description: 'Expert guidance for @vercel/ncc — a simple CLI for compiling Node.js modules into a single file with all dependencies included. Use when bundling serverless functions, CLI tools, or any Node.js project into a self-contained file.'
metadata:
priority: 4
docs:
- "https://github.com/vercel/ncc"
pathPatterns: []
importPatterns:
- '@vercel/ncc'
bashPatterns:
- '\bnpm\s+(install|i|add)\s+[^\n]*@vercel/ncc\b'
- '\bpnpm\s+(install|i|add)\s+[^\n]*@vercel/ncc\b'
- '\bbun\s+(install|i|add)\s+[^\n]*@vercel/ncc\b'
- '\byarn\s+add\s+[^\n]*@vercel/ncc\b'
- '\bncc\s+build\b'
---
# @vercel/ncc — Node.js Compiler Collection
You are an expert in `@vercel/ncc`, Vercel's simple CLI for compiling a Node.js module into a single file, together with all its dependencies.
## Overview
ncc bundles a Node.js application and all of its `node_modules` into a single output file. This is ideal for:
- **Serverless functions** — deploy a single file instead of `node_modules`
- **CLI tools** — distribute a self-contained executable
- **Docker images** — reduce image size by eliminating `node_modules`
## Installation
```bash
npm install -g @vercel/ncc
# Or as a dev dependency
npm install --save-dev @vercel/ncc
```
## Basic Usage
```bash
# Compile index.js into dist/index.js
ncc build input.js -o dist/
# Watch mode for development
ncc build input.js -o dist/ -w
# Run directly without writing to disk
ncc run input.js
```
## CLI Options
| Flag | Description |
|---|---|
| `-o, --out [dir]` | Output directory (default: `dist`) |
| `-m, --minify` | Minify the output |
| `-s, --source-map` | Generate source maps |
| `-a, --asset-builds` | Build nested JS assets recursively |
| `-e, --external [mod]` | Keep module as external (don't bundle) |
| `-w, --watch` | Watch mode — rebuild on changes |
| `-t, --transpile-only` | Skip TypeScript type checking |
| `--license [file]` | Output licenses to a file |
| `-q, --quiet` | Suppress non-error output |
| `--no-cache` | Skip the build cache |
| `--no-asset-builds` | Skip nested JS asset builds |
## package.json Integration
```json
{
"scripts": {
"build": "ncc build src/index.ts -o dist/ -m",
"build:watch": "ncc build src/index.ts -o dist/ -w",
"start": "node dist/index.js"
},
"devDependencies": {
"@vercel/ncc": "^0.38.0"
}
}
```
## TypeScript Support
ncc natively supports TypeScript — no separate `tsc` step needed:
```bash
# Compiles TypeScript directly
ncc build src/index.ts -o dist/
# Skip type checking for faster builds
ncc build src/index.ts -o dist/ -t
```
ncc uses the project's `tsconfig.json` automatically.
## Externals
Keep specific modules out of the bundle (useful for native modules or optional dependencies):
```bash
# Single external
ncc build input.js -e aws-sdk
# Multiple externals
ncc build input.js -e aws-sdk -e sharp
```
For serverless environments where the runtime provides certain modules (like AWS Lambda's `aws-sdk`), mark them as external.
## Static Assets
ncc handles non-JS assets (`.json`, `.node`, binary files) by copying them to the output directory alongside the compiled JS file. They are referenced correctly at runtime.
## Common Patterns
### Serverless Function Bundling
```bash
# Build a minimal serverless handler
ncc build api/handler.ts -o .output/ -m --no-cache
```
### CLI Tool Distribution
```json
{
"bin": "dist/index.js",
"scripts": {
"prepublishOnly": "ncc build src/index.ts -o dist/ -m"
}
}
```
### GitHub Actions
```bash
# Bundle a GitHub Action into a single file
ncc build src/index.ts -o dist/ -m --license licenses.txt
```
GitHub Actions require all dependencies bundled — ncc is the recommended bundler for custom JS/TS actions.
## Key Points
1. **Single-file output** — all dependencies inlined, no `node_modules` needed at runtime
2. **TypeScript native** — compiles `.ts` files directly using the project's `tsconfig.json`
3. **No config file** — entirely driven by CLI flags
4. **Asset handling** — non-JS files are automatically copied to the output directory
5. **Use externals for native modules** — binary `.node` modules often need to be external
6. **Source maps for debugging** — use `-s` flag to generate `.js.map` files
7. **Watch mode for dev** — use `-w` for fast iteration during development
## Official Resources
- [ncc GitHub](https://github.com/vercel/ncc)
- [Vercel Blog — ncc Introduction](https://github.com/vercel/ncc)