ts-node vs SWC: executando TypeScript mais rápido no CI
O ts-node roda TypeScript através do tsc; combiná-lo com o SWC register (ou @swc-node) troca o transpile pela velocidade do Rust, para uma execução muito mais rápida.
O ts-node executa TypeScript via o compilador do TypeScript. A abordagem SWC (a flag --swc do ts-node ou @swc-node/register) transpila com SWC em Rust para um startup muito mais rápido, ao custo de não rodar o type-checking completo durante a execução.
| ts-node | SWC (register) | |
|---|---|---|
| Motor de transpile | tsc | SWC (Rust) |
| Velocidade de startup | Mais lenta | Muito mais rápida |
| Type checking | Opcional (mais lento) | Não (só remove) |
| Suporte a ESM | Funciona (config) | Funciona |
| Melhor para | Execução ciente de tipos | Execução rápida de scripts/testes |
No CI
O ts-node puro pode fazer type-check conforme executa, mas é a opção mais lenta; usar o SWC register (ou ts-node --swc) mantém o mesmo workflow enquanto transpila muito mais rápido, o que reduz o startup de scripts e testes. Como outros transpiladores rápidos, o SWC não faz type-check, então rode tsc --noEmit separadamente. Para pura velocidade de execução no CI, o caminho SWC vence.
Type-check separado
Adicione uma etapa tsc --noEmit (em paralelo) para segurança de tipos, já que o SWC apenas remove os tipos. Ambos rodam em managed runners; runners gerenciados mais rápidos encurtam longas passagens de type-check em bases de código grandes.
O veredito
Quer a execução de TypeScript mais rápida: ts-node com o SWC register (ou @swc-node), mais uma verificação separada tsc --noEmit. Precisa de execução ciente de tipos em uma só ferramenta: ts-node puro. A maioria dos pipelines separa velocidade de type-checking.