Como Instalar e Configurar Node.js e NPM no Windows
Node.js é um runtime JavaScript de código aberto e multiplataforma, construído sobre o motor V8 do Chrome, que executa código JavaScript fora de um navegador. NPM (Node Package Manager) é o gestor de pacotes padrão incluído com o Node.js, fornecendo acesso a mais de dois milhões de pacotes reutilizáveis. Juntos, formam a cadeia de ferramentas fundamental para construir aplicações do lado do servidor, ferramentas CLI, REST APIs e projetos JavaScript full-stack no Windows.
Este guia abrange o fluxo de trabalho completo de instalação, verificação, configuração e primeira aplicação para Node.js e NPM no Windows — incluindo gestão de versões, resolução de problemas de PATH, âmbito de pacotes global vs. local e considerações de nível de produção que a maioria dos tutoriais omite.
Escolher a Versão Correta do Node.js Antes de Instalar
O calendário de lançamentos do Node.js segue um ritmo previsível que afeta diretamente a sua escolha:
| Tipo de Lançamento | Estabilidade | Caso de Uso | Janela de Suporte |
|---|
| — | — | — | — |
|---|
| **LTS (Suporte de Longa Duração)** | Alta | Cargas de trabalho de produção, ambientes de equipa | 30 meses |
|---|
| **Current** | Moderada | Acesso às funcionalidades mais recentes do motor V8 | 6 meses |
|---|
| **Nightly / RC** | Experimental | Contribuidores principais, testes de ponta | Sem garantia |
|---|
As versões LTS têm números de versão principal pares (por exemplo, 20.x, 22.x) e recebem patches críticos de segurança durante 30 meses. Os lançamentos Current têm números de versão principal ímpares e transitam para o estado LTS após seis meses se cumprirem os critérios de estabilidade.
Para a maioria dos programadores e implementações em servidor — incluindo aplicações alojadas em VPS Hosting — LTS é a escolha correta. O ramo Current é adequado apenas quando necessita especificamente de uma funcionalidade do V8 ou de uma API do Node.js que ainda não chegou à linha LTS ativa.
NVM para Windows: A Alternativa Profissional à Instalação Direta
Antes de prosseguir com o instalador MSI, considere se precisa do nvm-for-windows (Node Version Manager para Windows). O instalador direto vincula o seu sistema a uma única versão do Node.js. O NVM permite instalar múltiplas versões lado a lado e alternar entre elas por projeto — fundamental quando se mantêm bases de código legadas a par de versões modernas.
Instale o nvm-for-windows a partir da sua página oficial de lançamentos no GitHub e, em seguida, utilize:
“`
nvm install 20.14.0
nvm use 20.14.0
nvm list
“`
Se estiver a gerir um único projeto ou a aprender Node.js pela primeira vez, o instalador MSI é suficiente. Para ambientes profissionais, o NVM é fortemente recomendado.
Passo 1: Descarregar o Instalador do Node.js
- Aceda ao site oficial do Node.js em nodejs.org.
- Selecione o separador LTS e descarregue o Instalador para Windows (`.msi`) para a sua arquitetura. Quase todas as máquinas Windows modernas são de 64 bits (`node-v20.x.x-x64.msi`). As versões ARM64 estão disponíveis para dispositivos Windows on ARM.
- Verifique o checksum SHA-256 do ficheiro descarregado em relação aos valores publicados na página de downloads do Node.js antes de executar o instalador. Este passo é inegociável em qualquer ambiente com consciência de segurança.
Para verificar o checksum no PowerShell:
“`powershell
Get-FileHash .node-v20.14.0-x64.msi -Algorithm SHA256
“`
Compare o resultado com o hash publicado. Uma discrepância indica um download corrompido ou adulterado.
Passo 2: Instalar o Node.js e o NPM
- Faça duplo clique no ficheiro `.msi` descarregado para iniciar o Assistente de Configuração.
- Clique em Seguinte no ecrã de boas-vindas.
- Aceite o Contrato de Licença do Utilizador Final e clique em Seguinte.
- O caminho de instalação predefinido é `C:Program Filesnodejs`. A menos que tenha uma razão específica para o alterar (por exemplo, uma unidade que não seja do sistema para gestão de espaço em disco), deixe-o como está.
- No ecrã de Configuração Personalizada, confirme que o npm package manager está selecionado. Está ativado por predefinição.
- No ecrã Ferramentas para Módulos Nativos, verá uma opção para instalar automaticamente o Chocolatey, Python e as Visual Studio Build Tools. Marque esta caixa se antecipar a instalação de pacotes NPM que incluam addons nativos em C++ (por exemplo, pacotes dependentes de `bcrypt`, `sharp`, `node-gyp`). Este passo instala vários gigabytes de ferramentas — ignore-o se apenas precisar de pacotes JavaScript puros.
- Clique em Instalar e depois em Concluir.
O instalador regista automaticamente `node.exe` e `npm.cmd` na variável de ambiente `PATH` do sistema em `C:Program Filesnodejs`.
O Que o Instalador Realmente Faz ao Seu Sistema
Compreender os efeitos secundários evita dores de cabeça futuras na depuração:
- Adiciona `C:Program Filesnodejs` ao PATH do Sistema (disponível para todos os utilizadores).
- Cria `C:Users<username>AppDataRoamingnpm` como prefixo de pacote global predefinido.
- Regista o Node.js no registo do Windows em `HKLMSOFTWARENode.js`.
- Instala `npx` (o executor de pacotes NPM) juntamente com `npm`.
Passo 3: Verificar a Instalação
Abra uma nova janela de Linha de Comandos ou PowerShell. O qualificador “nova” é importante — as sessões de terminal existentes armazenam em cache o PATH antigo e não refletirão as alterações do instalador.
“`
node -v
“`
Resultado esperado: `v20.14.0` (ou a sua versão instalada)
“`
npm -v
“`
Resultado esperado: `10.x.x`
“`
npx -v
“`
Resultado esperado: corresponde ou está próximo da versão do npm
Se `node` não for reconhecido, o PATH não foi atualizado corretamente. Corrija-o manualmente:
- Abra Propriedades do Sistema > Avançadas > Variáveis de Ambiente.
- Em Variáveis do sistema, localize `Path` e clique em Editar.
- Adicione `C:Program Filesnodejs` se estiver ausente.
- Clique em OK, feche todas as janelas de terminal e reabra.
Diagnosticar Problemas Comuns Após a Instalação
Problema: `npm` é reconhecido mas `node` não é (ou vice-versa).
Causa: Uma entrada de PATH parcial ou uma instalação conflituante do Chocolatey ou de uma configuração NVM anterior.
Correção: Execute `where node` e `where npm` para identificar quais os binários que estão a ser resolvidos. Remova as entradas obsoletas.
Problema: Erros de permissão `EACCES` ao executar `npm install -g`.
Causa: O diretório de prefixo global não tem permissões de escrita para o utilizador atual.
Correção: Altere o prefixo global para um diretório pertencente ao utilizador (abordado no Passo 5).
Problema: `node` abre a Microsoft Store em vez de executar o Node.js.
Causa: O Windows 10/11 inclui um Alias de Execução de Aplicação para `node` que redireciona para a Store.
Correção: Vá a Definições > Aplicações > Aliases de execução de aplicações e desative os aliases para `python.exe` e `node.exe` (se presentes).
Passo 4: Atualizar o NPM para a Versão Mais Recente
A versão do NPM incluída com um instalador do Node.js está tipicamente uma ou duas versões menores atrás do lançamento atual. Atualize-a imediatamente após a instalação:
“`
npm install -g npm@latest
“`
O sinalizador `-g` instala o pacote no diretório de prefixo global, tornando-o disponível em todo o sistema. Após a atualização, verifique novamente:
“`
npm -v
“`
Caso extremo importante: No Windows, atualizar o NPM globalmente pode ocasionalmente deixar um `npm.cmd` obsoleto em `C:Program Filesnodejs` apontando para a versão antiga enquanto a nova versão está instalada em `C:Users<username>AppDataRoamingnpm`. Se `npm -v` ainda mostrar a versão antiga após a atualização, verifique qual o binário que aparece primeiro no PATH:
“`
where npm
“`
O caminho em `AppDataRoamingnpm` deve aparecer antes de `C:Program Filesnodejs` no resultado. Se não for o caso, reordene as entradas do PATH em conformidade.
Passo 5: Configurar o NPM para o Seu Ambiente
A configuração do NPM é armazenada num ficheiro `.npmrc`, que pode existir em três níveis: por projeto, por utilizador (`C:Users<username>.npmrc`) e global (`C:Program Filesnodejsnode_modulesnpmnpmrc`). As definições por projeto substituem as definições por utilizador, que substituem as definições globais.
Alterar o Prefixo de Pacote Global
O prefixo global predefinido (`AppDataRoamingnpm`) funciona para a maioria dos utilizadores, mas em servidores partilhados ou quando se aplicam quotas de disco, pode querer redirecioná-lo:
“`
npm config set prefix "D:NodeGlobal"
“`
Após alterar o prefixo, adicione o novo subdiretório `bin` ao seu PATH:
“`
setx PATH "%PATH%;D:NodeGlobal"
“`
Configurar um Registo Privado ou Espelho
Ambientes corporativos e servidores isolados frequentemente utilizam um registo NPM privado (Verdaccio, Nexus, Artifactory):
“`
npm config set registry "https://your-private-registry.example.com/"
“`
Para autenticar num registo privado:
“`
npm login –registry=https://your-private-registry.example.com/
“`
Apenas para pacotes com âmbito (por exemplo, `@mycompany/*`), pode encaminhar apenas esse âmbito para um registo privado, mantendo o registo público intacto:
“`
npm config set @mycompany:registry "https://your-private-registry.example.com/"
“`
Configurar um Proxy HTTP
Se a sua máquina Windows estiver atrás de um proxy corporativo:
“`
npm config set proxy "http://proxy.company.com:8080"
npm config set https-proxy "http://proxy.company.com:8080"
“`
Auditar Todas as Definições Atuais
“`
npm config list
npm config list –json
“`
O sinalizador `–json` produz configuração legível por máquina, útil para diagnósticos de scripts e pipelines CI/CD.
Referência de Configuração NPM Útil
| Chave de Configuração | Valor Predefinido | Finalidade |
|---|
| — | — | — |
|---|
| `prefix` | `%APPDATA%npm` | Localização de instalação de pacotes globais |
|---|
| `registry` | `https://registry.npmjs.org/` | Registo de origem de pacotes |
|---|
| `cache` | `%APPDATA%npm-cache` | Diretório de cache de pacotes local |
|---|
| `save-exact` | `false` | Fixar versões exatas em `package.json` |
|---|
| `fund` | `true` | Mostrar mensagens de financiamento após instalação |
|---|
| `audit` | `true` | Executar auditoria de segurança na instalação |
|---|
Passo 6: Criar e Executar uma Aplicação Node.js
Inicializar o Projeto
“`
mkdir my-node-app
cd my-node-app
npm init -y
“`
`npm init -y` gera um `package.json` com predefinições derivadas do nome do diretório e da sua configuração de utilizador NPM. O ficheiro `package.json` é o manifesto da sua aplicação — define o ponto de entrada, scripts, dependências e metadados.
Construir um Servidor HTTP Básico
Crie `app.js` no diretório do projeto:
“`javascript
// app.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
“`
Execute-o:
“`
node app.js
“`
Navegue para `http://127.0.0.1:3000/` no seu navegador. Deverá ver `Hello, World!`.
Nota técnica: O Node.js utiliza um ciclo de eventos de thread único suportado pelo libuv para operações de I/O. O callback `http.createServer` é acionado em cada pedido recebido sem bloquear o ciclo. Esta arquitetura torna o Node.js altamente eficiente para cargas de trabalho com I/O intensivo, mas inadequado para tarefas com uso intensivo de CPU sem worker threads ou processos filho.
Adicionar o Framework Express
O Express é o framework HTTP padrão de facto para Node.js, fornecendo roteamento, suporte a middleware e uma abstração limpa de pedido/resposta:
“`
npm install express
“`
Isto instala o Express localmente (em `node_modules/`) e regista-o como dependência em `package.json`. Atualize `app.js`:
“`javascript
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
“`
“`
node app.js
“`
Visite `http://localhost:3000/` para confirmar a resposta.
Compreender `node_modules` e `.gitignore`
O diretório `node_modules` pode conter centenas de megabytes de ficheiros. Nunca o submeta ao controlo de versões. Crie um ficheiro `.gitignore`:
“`
node_modules/
.env
“`
Os colaboradores e os pipelines de implementação restauram as dependências executando `npm install`, que lê `package.json` e `package-lock.json` para reproduzir a árvore de dependências exata.
Passo 7: Gerir Pacotes — Local vs. Global
Compreender a distinção entre instalação de pacotes local e global é uma das fontes de confusão mais comuns para os recém-chegados ao Node.js.
| Âmbito | Comando de Instalação | Localização | Caso de Uso |
|---|
| — | — | — | — |
|---|
| **Local** | `npm install <pkg>` | `./node_modules/` | Dependências da aplicação |
|---|
| **Local Dev** | `npm install –save-dev <pkg>` | `./node_modules/` | Ferramentas de compilação, executores de testes |
|---|
| **Global** | `npm install -g <pkg>` | `%APPDATA%npm` | Ferramentas CLI (por exemplo, `nodemon`, `pm2`) |
|---|
Regra fundamental: Se um pacote fornece uma ferramenta de linha de comandos que pretende disponível em todo o lado (por exemplo, `nodemon`, `eslint`, `typescript`), instale-o globalmente. Se for uma biblioteca que a sua aplicação importa com `require()` ou `import`, instale-a localmente.
Executar Aplicações em Produção com PM2
Para qualquer aplicação Node.js implementada num servidor — seja numa instância de VPS Hosting ou num Servidor Dedicado — executar `node app.js` diretamente é insuficiente. O processo terminará se o terminal for fechado ou ocorrer uma exceção não tratada.
O PM2 é o gestor de processos padrão para Node.js em produção:
“`
npm install -g pm2
pm2 start app.js –name "my-app"
pm2 startup
pm2 save
“`
`pm2 startup` gera um comando para configurar o PM2 para reiniciar a sua aplicação automaticamente no arranque do sistema. `pm2 save` persiste a lista de processos atual.
Passo 8: Reforço de Segurança e Auditoria
Executar uma Auditoria de Dependências
“`
npm audit
“`
O NPM cruza os seus pacotes instalados com a Base de Dados de Avisos do GitHub. Quaisquer vulnerabilidades conhecidas são reportadas com níveis de gravidade (baixo, moderado, alto, crítico) e caminhos de remediação.
“`
npm audit fix
“`
Isto atualiza automaticamente os pacotes vulneráveis para a versão corrigida mais próxima sem quebras. Para alterações com quebras, reveja o resultado e atualize manualmente.
Fixar Versões de Dependências
Em `package.json`, o NPM utiliza intervalos de versionamento semântico por predefinição (`^1.2.3` permite atualizações menores e de patch). Em produção, fixe versões exatas para evitar surpresas na cadeia de fornecimento:
“`
npm config set save-exact true
“`
Ou substitua manualmente os prefixos `^` por strings de versão exatas em `package.json` e submeta o ficheiro `package-lock.json`.
Evitar Executar o NPM como Administrador
Executar `npm install -g` com privilégios elevados escreve ficheiros pertencentes à conta de Administrador, o que pode causar erros de permissão em operações subsequentes sem elevação. Configure um prefixo global pertencente ao utilizador (ver Passo 5) para eliminar completamente a necessidade de privilégios elevados.
Implementar Aplicações Node.js num Servidor
O desenvolvimento local é apenas a primeira fase. A implementação em produção introduz requisitos adicionais: gestão de processos, proxy reverso, terminação TLS e gestão de variáveis de ambiente.
Uma stack de produção típica numa instância Linux de VPS Hosting combina o Node.js com o Nginx como proxy reverso. O Nginx trata da terminação TLS (utilizando certificados de um fornecedor como Certificados SSL) e encaminha os pedidos para o processo Node.js a escutar numa porta local.
Para equipas que preferem um ambiente de painel de controlo gerido, o VPS com cPanel fornece gestão de aplicações Node.js através da interface cPanel, simplificando a implementação sem necessitar de configuração direta via SSH.
A configuração específica do ambiente (credenciais de base de dados, chaves API, números de porta) nunca deve ser codificada diretamente. Utilize um ficheiro `.env` com o pacote `dotenv`:
“`
npm install dotenv
“`
“`javascript
require('dotenv').config();
const port = process.env.PORT || 3000;
“`
Matriz de Decisão: Quando Usar Cada Método de Instalação
| Cenário | Abordagem Recomendada |
|---|
| — | — |
|---|
| Projeto único, a aprender Node.js | Instalador MSI, versão LTS |
|---|
| Múltiplos projetos com diferentes versões do Node.js | nvm-for-windows |
|---|
| Pipeline CI/CD no Windows Server | Instalador MSI ou Chocolatey (`choco install nodejs-lts`) |
|---|
| Servidor Linux de produção | Gestor de pacotes (apt/yum) ou nvm |
|---|
| Aplicação em contentor | Imagem Docker oficial `node` |
|---|
| Ambiente corporativo isolado | MSI offline + registo NPM privado (Verdaccio) |
|---|
Principais Conclusões Técnicas
- Instale sempre a versão LTS para produção e ambientes de equipa. Utilize o lançamento Current apenas quando for necessária uma funcionalidade específica do V8 ou da API do Node.js.
- Utilize o nvm-for-windows em qualquer ambiente onde múltiplas versões do Node.js devam coexistir.
- Verifique o checksum SHA-256 do instalador antes da execução.
- Altere o prefixo NPM global para um diretório pertencente ao utilizador para evitar erros de permissão e eliminar a necessidade de privilégios elevados.
- Nunca submeta `node_modules/` ao controlo de versões. Submeta sempre `package-lock.json`.
- Execute `npm audit` após cada `npm install` nos pipelines de produção.
- Utilize o PM2 para gestão de processos em qualquer implementação em servidor — nunca execute `node app.js` diretamente em produção.
- Termine o TLS na camada de proxy reverso (Nginx, Caddy) em vez de dentro do processo Node.js para melhor desempenho e gestão de certificados.
- Armazene segredos em variáveis de ambiente carregadas via `dotenv`, nunca no código fonte.
Perguntas Frequentes
Qual é a diferença entre o Node.js LTS e o Current no Windows?
As versões LTS recebem patches de segurança e estabilidade durante 30 meses e têm números de versão principal pares (18, 20, 22). As versões Current incluem as funcionalidades mais recentes de linguagem e runtime, mas são suportadas apenas durante seis meses antes de transitarem para LTS ou serem descontinuadas. Para implementações Windows em produção, utilize sempre LTS.
Por que razão `npm install -g` falha com um erro de permissões no Windows?
O prefixo global predefinido (`C:Users<username>AppDataRoamingnpm`) ocasionalmente não tem permissões de escrita devido a políticas UAC ou instalações anteriores executadas como Administrador. A correção é executar o terminal como Administrador (não recomendado a longo prazo) ou reconfigurar o prefixo global para um diretório que a sua conta de utilizador possua com `npm config set prefix "C:yourpath"`.
Posso executar múltiplas versões do Node.js simultaneamente no Windows?
Sim, utilizando o nvm-for-windows. Instale-o e, em seguida, utilize `nvm install <version>` e `nvm use <version>` para alternar o runtime ativo. Cada versão mantém o seu próprio diretório de pacotes global, evitando conflitos entre versões.
O que é `package-lock.json` e devo submetê-lo?
`package-lock.json` é um registo exato e determinístico de toda a árvore de dependências resolvida durante `npm install`. Garante que cada programador e cada execução CI/CD instala versões de pacotes idênticas. Submeta-o sempre ao controlo de versões e nunca o edite manualmente.
Como executo uma aplicação Node.js automaticamente no arranque do Windows sem um servidor?
Para máquinas de desenvolvimento, utilize o PM2 com `pm2 startup` e `pm2 save`. Para integração com o Serviço Windows, ferramentas como `node-windows` encapsulam um processo Node.js como um Serviço Windows nativo, permitindo a gestão através do snap-in MMC de Serviços e reinício automático em caso de falha ou reinicialização.
