Sobre el proyecto
ncc es una herramienta de línea de comandos mantenida por Vercel que agrupa un programa Node.js junto con todas sus dependencias en un único archivo de salida, siguiendo el espíritu de la compilación estilo gcc. Su objetivo de diseño es la configuración cero: apunta a un archivo de entrada y produce una compilación compacta, con TypeScript manejado de forma nativa cuando hay un tsconfig.json presente.
Los comandos principales son `build` (emite un archivo agrupado a un directorio de salida, por defecto `dist/index.js`), `run` (compila en un directorio temporal y ejecuta con soporte completo de mapas de origen para pruebas y depuración), y `cache` (limpia, inspecciona o mide el tamaño de la caché de compilación). Las opciones cubren necesidades comunes de agrupación: `--minify`, `--source-map`, `--external` para omitir el agrupamiento de módulos específicos, `--watch` para reconstrucciones incrementales, `--target` para establecer el nivel de salida ECMAScript, `--v8-cache` para emitir una caché de compilación V8, `--license` para adjuntar información de licencia, `--stats-out` para volcar estadísticas de webpack como JSON, y `--asset-builds` para agrupar recursivamente activos JS anidados como scripts de trabajadores. El formato del módulo se infiere de la entrada, por lo que las entradas `.mjs` o archivos dentro de un límite de paquete `"type": "module"` producen salida de módulo ES, mientras que las entradas `.cjs` conservan la extensión CommonJS.
Más allá de la CLI, ncc expone una API programática desde Node.js. Llamar a `require('@vercel/ncc')` con una ruta de entrada y un objeto de opciones devuelve una promesa que resuelve a `{ code, map, assets }`, donde assets es un mapa de nombres de archivo a su fuente, permisos y metadatos de enlaces simbólicos. Las opciones reflejan las banderas de la CLI, incluyendo rutas de caché personalizadas, externos, minificación, mapas de origen, modo de observación, generación de licencias y selección de objetivo. En modo de observación, el objeto devuelto expone callbacks `handler`, `rebuild` y `close` en lugar de una promesa.
Las motivaciones declaradas del proyecto son publicar paquetes npm mínimos, enviar solo código relevante a entornos serverless, evitar la sobrecarga de configuración del empaquetador y mejorar el tiempo de arranque y E/S. Apunta a programas Node.js tanto como entrada como salida y busca soportar todos los patrones de Node.js y módulos npm. Una advertencia documentada es que la reubicación de archivos y activos depende de un evaluador estático, por lo que los activos cargados dinámicamente que no pueden analizarse estáticamente pueden no reubicarse correctamente. Algunos paquetes requieren opciones adicionales para compatibilidad completa, que están catalogadas en la documentación de soporte de paquetes del repositorio.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.