Sobre o projeto
O ncc é uma ferramenta de linha de comando mantida pela Vercel que empacota um programa Node.js junto com todas as suas dependências em um único arquivo de saída, seguindo o espírito da compilação estilo gcc. Seu objetivo principal é zero configuração: basta apontá-lo para um arquivo de entrada e ele produzirá uma construção compacta, tratando TypeScript nativamente quando um tsconfig.json estiver presente.
Os comandos principais são `build` (gera um arquivo empacotado em um diretório de saída, padrão `dist/index.js`), `run` (compila em um diretório temporário e executa com suporte completo a source-map para testes e depuração) e `cache` (limpa, inspeciona ou verifica o tamanho do cache de build). As opções cobrem necessidades comuns de bundling: `--minify`, `--source-map`, `--external` para ignorar módulos específicos, `--watch` para reconstruções incrementais, `--target` para definir o nível de saída ECMAScript, `--v8-cache` para gerar cache de compilação V8, `--license` para anexar informações de licenciamento, `--stats-out` para despejar estatísticas do webpack como JSON e `--asset-builds` para empacotar recursivamente ativos JS aninhados, como scripts de worker. O formato do módulo é inferido a partir da entrada; entradas `.mjs` ou arquivos dentro de um escopo de pacote com "type": "module" produzem saída ES module, enquanto entradas `.cjs` preservam a extensão CommonJS.
Além da CLI, o ncc expõe uma API programática do Node.js. Chamar `require('@vercel/ncc')` com um caminho de entrada e um objeto de opções retorna uma promise que resolve para `{ code, map, assets }`, onde assets é um mapa de nomes de arquivos para suas fontes, permissões e metadados de symlink. As opções espelham os sinalizadores da CLI, incluindo caminhos de cache personalizados, externos, minificação, source maps, modo watch, geração de licença e seleção de destino. No modo watch, o objeto retornado expõe callbacks `handler`, `rebuild` e `close` em vez de uma promise.
As motivações declaradas do projeto são publicar pacotes npm mínimos, enviar apenas código relevante para ambientes serverless, evitar a sobrecarga de configuração de bundlers e melhorar o tempo de inicialização e E/S. Ele tem como alvo programas Node.js tanto na entrada quanto na saída e visa suportar todos os padrões do Node.js e módulos npm. Uma ressalva documentada é que a relocação de arquivos e ativos depende de um avaliador estático, portanto, ativos carregados dinamicamente que não podem ser analisados estaticamente podem não ser realocados corretamente. Alguns pacotes requerem opções extras para compatibilidade total, catalogadas na documentação de suporte a pacotes do repositório.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.