Об этом проекте
ncc — это инструмент командной строки, поддерживаемый Vercel, который объединяет программу на Node.js со всеми её зависимостями в один выходной файл, следуя принципу компиляции в стиле gcc. Его главная цель — нулевая конфигурация: достаточно указать входной файл, и он создаст компактную сборку, нативно обрабатывая TypeScript при наличии файла tsconfig.json.
Основные команды включают `build` (генерация bundled-файла в директорию вывода, по умолчанию `dist/index.js`), `run` (сборка во временную директорию с поддержкой source-map для тестирования) и `cache` (управление кэшем сборки). Опции охватывают типичные потребности: `--minify`, `--source-map`, `--external` для исключения модулей из сборки, `--watch` для инкрементальной пересборки, `--target` для уровня ECMAScript, `--v8-cache` для генерации кэша V8, `--license` для добавления лицензий, `--stats-out` для вывода статистики webpack в JSON и `--asset-builds` для рекурсивной упаковки вложенных JS-активов, таких как скрипты воркеров. Формат модуля определяется автоматически: `.mjs` или файлы внутри пакета с "type": "module" дают ES-модули, а `.cjs` сохраняют CommonJS.
Помимо CLI, ncc предоставляет программный API через Node.js. Вызов `require('@vercel/ncc')` с путем ввода и объектом опций возвращает промис, разрешающийся в объект `{ code, map, assets }`, где assets содержит метаданные файлов. Опции API дублируют флаги CLI, включая пользовательские пути кэша, внешние модули, минификацию, source-map, режим наблюдения, генерацию лицензий и выбор целевого уровня. В режиме наблюдения возвращаемый объект предоставляет колбэки `handler`, `rebuild` и `close` вместо промиса.
Проект создан для публикации минимальных npm-пакетов, доставки только релевантного кода в serverless-среды, избегания накладных расходов на настройку сборщиков и улучшения времени запуска и ввода-вывода. Он ориентирован на программы Node.js как на вход, так и на выход, стремясь поддерживать все паттерны Node.js и модули npm. Известное ограничение заключается в том, что перемещение файлов и активов зависит от статического анализатора; динамически загружаемые активы, которые не могут быть проанализированы статически, могут быть перемещены неправильно. Некоторые пакеты требуют дополнительных опций для полной совместимости, которые задокументированы в разделе package-support репозитория.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.