Configurando o Ambiente de Desenvolvimento
Antes de começar a escrever código, precisamos configurar um ambiente de desenvolvimento profissional. Nesta aula, vamos instalar e configurar todas as ferramentas necessárias.
Pré-requisitos
Certifique-se de ter instalado:
- Node.js 18+ - nodejs.org
- VS Code - code.visualstudio.com
- Git - git-scm.com
Verifique as instalações:
node --version # v18.x.x ou superiornpm --version # 9.x.x ou superiorgit --version # 2.x.x ou superiorCriando o Projeto
Vamos criar a estrutura inicial do projeto:
# Criar pasta do projetomkdir ecommerce-apicd ecommerce-api # Inicializar projeto Node.jsnpm init -y # Criar estrutura de pastasmkdir -p src/{controllers,services,repositories,middlewares,routes,utils,types,config}mkdir -p tests/{unit,integration}Estrutura de pastas:
ecommerce-api/
├── src/
│ ├── controllers/ # Handlers das rotas
│ ├── services/ # Lógica de negócio
│ ├── repositories/ # Acesso a dados
│ ├── middlewares/ # Middlewares Express
│ ├── routes/ # Definição de rotas
│ ├── utils/ # Funções utilitárias
│ ├── types/ # Tipos TypeScript
│ ├── config/ # Configurações
│ └── app.ts # Configuração do Express
│ └── server.ts # Entrada da aplicação
├── tests/
│ ├── unit/ # Testes unitários
│ └── integration/ # Testes de integração
├── package.json
└── tsconfig.json
Instalando TypeScript
# Instalar TypeScript e tipos do Node.jsnpm install -D typescript @types/node ts-node tsx # Criar arquivo de configuraçãonpx tsc --initConfigurando tsconfig.json
Substitua o conteúdo do tsconfig.json:
{ "compilerOptions": { // Configurações de compilação "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", "lib": ["ES2022"], // Diretórios "rootDir": "./src", "outDir": "./dist", // Opções de tipo "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, // Recursos adicionais "resolveJsonModule": true, "declaration": true, "declarationMap": true, "sourceMap": true, // Paths (aliases) "baseUrl": ".", "paths": { "@/*": ["src/*"], "@/controllers/*": ["src/controllers/*"], "@/services/*": ["src/services/*"], "@/types/*": ["src/types/*"] } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist", "tests"]}Opções Importantes
| Opção | Descrição |
|---|---|
strict: true | Ativa todas as verificações rigorosas |
esModuleInterop | Permite imports de módulos CommonJS |
skipLibCheck | Acelera compilação ignorando tipos de libs |
paths | Permite aliases como @/services |
Configurando ESLint
ESLint analisa seu código e encontra problemas:
# Instalar ESLint com suporte a TypeScriptnpm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-pluginCrie o arquivo eslint.config.mjs:
import eslint from '@eslint/js';import tseslint from 'typescript-eslint'; export default tseslint.config( eslint.configs.recommended, ...tseslint.configs.recommended, { rules: { // Regras personalizadas '@typescript-eslint/explicit-function-return-type': 'warn', '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/no-explicit-any': 'warn', 'no-console': ['warn', { allow: ['warn', 'error'] }], }, ignores: ['dist/', 'node_modules/'], });Configurando Prettier
Prettier formata seu código automaticamente:
npm install -D prettier eslint-config-prettierCrie o arquivo .prettierrc:
{ "semi": true, "singleQuote": true, "tabWidth": 2, "trailingComma": "es5", "printWidth": 100, "bracketSpacing": true, "arrowParens": "avoid"}Crie .prettierignore:
dist
node_modules
coverage
*.md
Scripts do package.json
Atualize o package.json:
{ "name": "ecommerce-api", "version": "1.0.0", "type": "module", "scripts": { "dev": "tsx watch src/server.ts", "build": "tsc", "start": "node dist/server.js", "lint": "eslint src/", "lint:fix": "eslint src/ --fix", "format": "prettier --write src/", "typecheck": "tsc --noEmit" }, "engines": { "node": ">=18.0.0" }}Entendendo os Scripts
| Script | Descrição |
|---|---|
npm run dev | Inicia servidor de desenvolvimento com hot-reload |
npm run build | Compila TypeScript para JavaScript |
npm start | Executa versão compilada (produção) |
npm run lint | Verifica problemas de código |
npm run format | Formata código com Prettier |
Extensões do VS Code
Instale as extensões recomendadas:
// .vscode/extensions.json{ "recommendations": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "prisma.prisma", "bradlc.vscode-tailwindcss", "mikestead.dotenv", "humao.rest-client", "streetsidesoftware.code-spell-checker", "streetsidesoftware.code-spell-checker-portuguese-brazilian" ]}Configurações do VS Code
Crie .vscode/settings.json:
{ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, "typescript.preferences.importModuleSpecifier": "relative", "files.exclude": { "**/.git": true, "**/node_modules": true, "**/dist": true }}Variáveis de Ambiente
Crie o arquivo .env para configurações sensíveis:
# .envNODE_ENV=developmentPORT=3000 # DatabaseDATABASE_URL="postgresql://user:password@localhost:5432/ecommerce" # JWTJWT_SECRET=sua-chave-secreta-muito-seguraJWT_EXPIRES_IN=7d # EmailSMTP_HOST=smtp.mailtrap.ioSMTP_PORT=587SMTP_USER=seu-usuarioSMTP_PASS=sua-senhaIMPORTANTE: Nunca commite o .env! Adicione ao .gitignore:
# .gitignorenode_modulesdist.env.env.localcoverage*.logCrie um .env.example como template:
# .env.exampleNODE_ENV=developmentPORT=3000DATABASE_URL="postgresql://user:password@localhost:5432/ecommerce"JWT_SECRET=change-meJWT_EXPIRES_IN=7dTestando a Configuração
Crie o arquivo src/server.ts:
const PORT = process.env.PORT || 3000; console.log(`🚀 Ambiente configurado com sucesso!`);console.log(`📦 Node.js ${process.version}`);console.log(`🔧 Modo: ${process.env.NODE_ENV || 'development'}`);console.log(`🌐 Porta: ${PORT}`);Execute:
npm run devSe tudo estiver correto, você verá:
🚀 Ambiente configurado com sucesso!
📦 Node.js v20.x.x
🔧 Modo: development
🌐 Porta: 3000
Resumo
Nesta aula configuramos:
- ✅ Projeto Node.js com estrutura organizada
- ✅ TypeScript com configurações rigorosas
- ✅ ESLint para análise de código
- ✅ Prettier para formatação
- ✅ VS Code com extensões úteis
- ✅ Variáveis de ambiente seguras
Na próxima aula, vamos criar nosso primeiro servidor Express! 🎉