TypeScript · Node.js 22

Hospedagem TypeScript 24/7

Dois caminhos, os dois suportados: compilar com tsc e apontar o MAIN para dist/index.js, ou deixar o tsx executar o .ts em produção. O que a plataforma pede é que a decisão esteja no package.json e no vertracloud.config.

Origem

Quem desenhou o TypeScript

Anders Hejlsberg, já autor do Turbo Pascal e do C#, publicou o TypeScript na Microsoft em 2012: JavaScript com um sistema de tipos que some na compilação. A 0.8 saiu naquele ano; a 1.0, em 2014. A tese era gradual — você anota o que cabe, o resto continua JS — e o emit é a mesma linguagem que o navegador já rodava. Não há máquina virtual nova: só um passo a mais no editor e no compilador.

Anders Hejlsberg

DBegley · CC BY 2.0

JavaScript com tipos

É isso o produto: a mesma linguagem da web, com um sistema de tipos no editor. Não é um runtime novo nem uma VM — é o JavaScript que você já tinha, anotado.

Os tipos não embarcam

Na compilação eles desaparecem. O que o motor executa é JavaScript puro, o mesmo que o navegador já rodava em 1995.

Para código que cresce

Hejlsberg vinha de bases grandes em C# e Delphi. O TypeScript existe para times e arquivos que o JS solto deixa escapar — a migração é gradual, arquivo a arquivo.

O que a plataforma faz por um projeto TypeScript

O build acontece no servidor, com a saída inteira no terminal — erro de tipo não vira crash silencioso em produção.

Compilado ou executado direto

Com tsc, MAIN aponta para dist/index.js e o START roda o script que compila antes de subir. Com tsx, o MAIN é o próprio .ts. A plataforma não impõe nenhum dos dois — ela executa o que o seu package.json manda.

tsconfig.json vale no build

O arquivo de configuração vai no zip e é o mesmo que o compilador lê no servidor. Alvo, module, paths e strict se comportam igual à sua máquina, e um erro de compilação aparece no log do build dentro do teto de 5 minutos.

dist não é limpo do pacote

A plataforma remove node_modules e .next do zip, mas nunca a pasta de saída. Quem faz bundle antes do deploy pode enviar dist pronto e apontar o MAIN para dentro dela, sem compilar de novo no servidor.

Auto-restart com freio

O processo que cai é reiniciado sozinho, em qualquer plano: o erro em runtime que o tipo não pegou não derruba o serviço. Se ele quebrar 5 vezes em 10 minutos, o auto-restart é desativado por 24 horas — e a saída com exit code 0 segue sendo tratada como fim normal, sem reinício.

O que as pessoas rodam em TypeScript aqui

Tipagem serve tanto para a API que outra equipe consome quanto para o bot que só você mantém.

APIs Nest, Fastify e Hono

Publique a aplicação para receber um subdomínio em vertraweb.app com TLS. Se você compila para dist, é o servidor compilado que precisa escutar em 0.0.0.0 na porta declarada em PORT — bind em localhost devolve timeout.

Bots de Discord tipados

discord.js com tipos de comando e evento roda como processo de background, sem porta HTTP. O token vai nas variáveis de ambiente do painel, nunca num .env dentro do zip.

Workers e jobs com Prisma ou Drizzle

Consumidor de fila, rotina agendada, ETL: o schema tipado sobe junto com o código. Rode a migração como parte do seu script de start, não no build.

ORM tipado com banco gerenciado

Prisma e Drizzle apontam para um PostgreSQL 17 ou um MySQL 8.0 criado no mesmo painel, pelo host interno. TLS é obrigatório: o certificado e a senha são gerados pela plataforma e ficam disponíveis para download.

Versões de Node.js para TypeScript

TypeScript roda sobre o Node.js: a recomendada é a 22, e 20 e 18 seguem disponíveis. Para fixar uma delas, declare VERSION no vertracloud.config.

Versãovertracloud.configStatus
Node.js 22VERSION=22RecomendadaMais recente
Node.js 20VERSION=20
Node.js 18VERSION=18

A configuração inteira

O vertracloud.config é um arquivo INI opcional na raiz do projeto. Aqui o MAIN aponta a saída compilada e o START chama o script do package.json; BUILD roda a compilação a cada deploy, antes de o app subir; VERSION escolhe o Node.js e MEMORY define o teto de RAM.

vertracloud.config
NAME=minha-api
MAIN=dist/index.js
START=npm start
VERSION=22
MEMORY=512

Um plano para cada fase do projeto

A memória e o armazenamento mudam por plano; a linguagem, não. Compare o que cada plano libera e escolha o que cabe no projeto agora.

Comparar planos

Também roda aqui

Mesma plataforma, mesmo deploy, outra stack.

Perguntas frequentes sobre hospedagem TypeScript

tsc ou tsx, dist ou servidor: as dúvidas que separam os dois caminhos.

O log diz tsx: command not found ou ts-node: command not found.

Quem executa o .ts em produção é dependência de execução, não de desenvolvimento. Adicione o tsx a dependencies do package.json — em devDependencies ele não é instalado no build e o start morre na primeira linha.

O build falha com TSError: Unable to compile.

Verifique se o tsconfig.json foi para o zip: sem ele o compilador usa o padrão e reclama de coisas que passam na sua máquina. Corrija os erros de tipo antes do deploy — o build não sobe código que não compila.

Devo enviar a pasta dist ou compilar no servidor?

Os dois funcionam. Enviando dist pronto, aponte MAIN=dist/index.js e não exclua a pasta do zip. Compilando no servidor, deixe o START chamar um script que roda tsc antes de iniciar o processo.

Recebi Cannot find module de um pacote que existe no meu projeto.

O pacote está em devDependencies, ou o caminho compilado não bate com o alias do tsconfig. Mova a dependência de execução para dependencies; se você usa paths, confirme que a saída compilada resolve o caminho real.

O que a plataforma remove do zip antes do build?

node_modules, .npm, package-lock.json e .next saem do pacote. As pastas de saída, dist e build, não: elas ficam de propósito, porque em muitos projetos o MAIN aponta para dentro delas.

Suba seu projeto TypeScript hoje

Crie a conta, envie um zip ou conecte o repositório do GitHub e acompanhe a compilação pelo terminal do painel.

Criar conta