Pular para o conteúdoPedro Farbo
Lição 2 / 2545 min

Configurando o Ambiente de Desenvolvimento

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:

Verifique as instalações:

bash
node --version    # v18.x.x ou superiornpm --version     # 9.x.x ou superiorgit --version     # 2.x.x ou superior

Criando o Projeto

Vamos criar a estrutura inicial do projeto:

bash
# 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

bash
# Instalar TypeScript e tipos do Node.jsnpm install -D typescript @types/node ts-node tsx # Criar arquivo de configuraçãonpx tsc --init

Configurando tsconfig.json

Substitua o conteúdo do tsconfig.json:

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çãoDescrição
strict: trueAtiva todas as verificações rigorosas
esModuleInteropPermite imports de módulos CommonJS
skipLibCheckAcelera compilação ignorando tipos de libs
pathsPermite aliases como @/services

Configurando ESLint

ESLint analisa seu código e encontra problemas:

bash
# Instalar ESLint com suporte a TypeScriptnpm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin

Crie o arquivo eslint.config.mjs:

javascript
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:

bash
npm install -D prettier eslint-config-prettier

Crie o arquivo .prettierrc:

json
{  "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:

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

ScriptDescrição
npm run devInicia servidor de desenvolvimento com hot-reload
npm run buildCompila TypeScript para JavaScript
npm startExecuta versão compilada (produção)
npm run lintVerifica problemas de código
npm run formatFormata código com Prettier

Extensões do VS Code

Instale as extensões recomendadas:

json
// .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:

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:

bash
# .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-senha

IMPORTANTE: Nunca commite o .env! Adicione ao .gitignore:

bash
# .gitignorenode_modulesdist.env.env.localcoverage*.log

Crie um .env.example como template:

bash
# .env.exampleNODE_ENV=developmentPORT=3000DATABASE_URL="postgresql://user:password@localhost:5432/ecommerce"JWT_SECRET=change-meJWT_EXPIRES_IN=7d

Testando a Configuração

Crie o arquivo src/server.ts:

typescript
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:

bash
npm run dev

Se 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! 🎉

Gostou do conteúdo? Sua contribuição ajuda a manter tudo online e gratuito!

PIX:0737160d-e98f-4a65-8392-5dba70e7ff3e