JavaScript roda no navegador e, fora dele, no Node.js. As lições usam o Node, que
roda arquivos .js direto do terminal. Vai estudar TypeScript? A instalação abaixo
serve também; depois, siga o guia de TypeScript.
Testar sem instalar nada
Todo navegador tem um console de JavaScript: aperte F12, abra a aba Console,
cole o código e aperte Enter. Serve para exemplos que só usam console.log e a
linguagem em si. Os que leem arquivos ou usam módulos do Node precisam do Node
instalado.
Instalar o Node.js
Baixe o instalador LTS no site oficial do Node.js. O Node executa os programas; o npm, que vem junto, instala pacotes JavaScript. Você também pode instalar pelo terminal, conforme o sistema abaixo.
Windows: instalador ou WinGet
No site, escolha Windows Installer (.msi) e mantenha os componentes padrão, incluindo npm package manager e Add to PATH. Ou abra o PowerShell e escolha um dos comandos:
# LTS: versão com suporte de longo prazo, recomendada para começar
winget install --id OpenJS.NodeJS.LTS --exact --source winget --scope machine
# Current: versão mais recente, com novidades antes da LTS
winget install --id OpenJS.NodeJS --exact --source winget --scope machine
O instalador pode pedir autorização de administrador. O escopo machine instala
para todos os usuários; no Windows de 64 bits, a pasta padrão é
C:\Program Files\nodejs. Uma instalação anterior ou um destino personalizado
pode mudar esse caminho. O npm e o npx vêm junto no instalador padrão.
Fontes: pacotes WinGet do Node
e instalador oficial.
Feche e abra o terminal, depois confira as versões e os caminhos:
node --version
npm.cmd --version
where.exe node
where.exe npm
npm.cmd evita o bloqueio de npm.ps1 pela política de execução do PowerShell.
No Prompt de Comando, também pode usar npm --version.
Linux: instalar para seu usuário com nvm
O nvm permite instalar e trocar versões do Node. Em Debian/Ubuntu, prepare o download e instale o nvm no Bash:
sudo apt-get update
sudo apt-get install -y curl ca-certificates
curl -fsSL --connect-timeout 10 --max-time 60 https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh -o /tmp/nvm-install.sh
less /tmp/nvm-install.sh
bash /tmp/nvm-install.sh
Confira o script no less e pressione q para sair antes de executar o próximo
comando. Abra outro terminal Bash e instale a LTS:
nvm install --lts
nvm alias default 'lts/*'
node --version
npm --version
command -v node
command -v npm
O npm vem com o Node. Por padrão, os arquivos ficam em
~/.nvm/versions/node/<versão>/bin; com XDG_CONFIG_HOME configurado, o nvm pode
usar outra pasta. A instalação é por usuário e o nvm é carregado em cada shell.
Se aparecer nvm: command not found, abra outro terminal ou carregue o arquivo de
configuração que o instalador atualizou, como source ~/.bashrc no Bash.
Linux: instalar para todos os usuários (Debian/Ubuntu)
Para disponibilizar Node também a outros usuários e serviços, use o pacote da NodeSource. Este procedimento configura um repositório do sistema e instala a linha LTS 24:
sudo apt-get update
sudo apt-get install -y curl ca-certificates
curl -fsSL --connect-timeout 10 --max-time 60 https://deb.nodesource.com/setup_24.x -o /tmp/nodesource_setup.sh
less /tmp/nodesource_setup.sh
sudo bash /tmp/nodesource_setup.sh
sudo apt-get install -y nodejs
/usr/bin/node --version
/usr/bin/npm --version
dpkg -L nodejs
Confira o script antes de executá-lo como administrador. O pacote da NodeSource
inclui npm; dpkg -L nodejs lista os arquivos instalados, incluindo os comandos
em /usr/bin. Isso difere de npm install -g, que instala pacotes npm no
prefixo da instalação atual e não torna um Node do nvm disponível a todos.
Se já usa nvm, command -v node pode continuar apontando para ele no seu terminal;
os caminhos absolutos acima conferem a instalação do sistema.
Executar um arquivo
Exemplo básico
Salve como basic.js. A variável guarda um nome e console.log mostra a mensagem.
Este exemplo também funciona no console do navegador.
const userName = 'Ana';
console.log(`Olá, ${userName}!`);
Na pasta do arquivo, execute:
node basic.js
Saída esperada:
Olá, Ana!
Jogar adivinhe o número
Salve o programa como main.js. O programa sorteia um número de 1 a 10 e dá três tentativas. Math.random
sorteia, readline lê o terminal e if escolhe a dica. As respostas mudam a cada
partida. O exemplo usa módulos do Node e não roda no console do navegador.
import { createInterface } from 'node:readline/promises';
import { stdin, stdout } from 'node:process';
const terminal = createInterface({ input: stdin, output: stdout });
const secret = Math.floor(Math.random() * 10) + 1;
let won = false;
try {
console.log('Adivinhe o número de 1 a 10. Você tem 3 tentativas.');
for (let attempt = 1; attempt <= 3; attempt++) {
console.log(`Tentativa ${attempt}:`);
const answer = await terminal.question('');
const guess = Number(answer);
if (!/^\d+$/.test(answer.trim()) || !Number.isInteger(guess) || guess < 1 || guess > 10) {
console.log('Digite um inteiro de 1 a 10. Esta tentativa foi consumida.');
continue;
}
if (guess === secret) {
console.log('Acertou!');
won = true;
break;
}
console.log(guess < secret ? 'O número é maior.' : 'O número é menor.');
}
if (!won) console.log(`Fim do jogo. O número era ${secret}.`);
} catch {
console.error('Não foi possível ler a resposta.');
process.exitCode = 1;
} finally {
terminal.close();
}
Na pasta do arquivo, execute:
node main.js
Uma interação no terminal será:
Adivinhe o número de 1 a 10. Você tem 3 tentativas.
Tentativa 1:
5
O número é maior.
Tentativa 2:
8
Acertou!
As linhas com os valores das respostas são digitadas por você. Pressione Enter após cada resposta. As demais linhas são a saída do programa.
Quando o exemplo é só um trecho
Salve as linhas num arquivo e rode com node. Se o trecho usa algo definido em outra
parte da lição (uma função, um objeto), copie essa parte para o mesmo arquivo.
Erros comuns
Cannot use import statement outside a module: aparece em versões antigas do Node. Atualize para a LTS ou salve o arquivo comomain.mjs.ReferenceError: x is not defined: o nome não foi declarado ou está escrito diferente (maiúsculas contam).Cannot access 'x' before initialization: a variávellet/constfoi usada antes da linha que a declara.document is not defined: o código é de navegador. Rode no console do navegador, não no Node.