AluraFlix - Estruturando o projeto
Tags: node, typescript
Published: 2021-07-28 22:31:27

Olá, meu nome é Gabriel Amorim e estou escrevendo esse artigo para acompanhar a segunda edição do **Alura Challenges**. Dessa vez a edição está sendo voltada para o **back-end**. Trata-se da construção de uma API para a consulta de vídeos. Irei postar os artigos conforme a realização dos desafios, e o post de hoje é voltado para a criação e estruturação inicial do projeto.

O desafio deixou livre as escolhas referentes a linguagem e tecnologias. Portanto decidi utilizar Node.js e TypeScript.

Sem muitas delongas, vamos ao código!

## Iniciando o projeto

Vamos começar criando a pasta do projeto pelo terminal:
```bash
$ mkdir alura-flix
```

Entre na pasta criada:
```bash
$ cd alura-flix
```

Inicie o projeto com o comando:
```bash
$ yarn init -y
```
Isso criará o arquivo `package.json` que é o ponto de partida de qualquer projeto em NodeJS. Ele é responsável por descrever o seu projeto, informar as engines (versão do node e do npm), url do repositório, versão do projeto, dependências de produção e de desenvolvimento dentre outras coisas.

Para saber mais sobre o `package.json` acesse: [https://gabrieluizramos.com.br/entendendo-o-package-json](https://gabrieluizramos.com.br/entendendo-o-package-json)


O próximo passo é instalar o express:
```bash
$ yarn add express
```

Express.js é um micro-framework para aplicações web para Node.js, lançado como software livre e de código aberto sob a Licença MIT. É feito para otimizar a construção de aplicações web e API's. É um dos mais populares frameworks para servidores em Node.js.

Criar pasta na raiz chamada "src" que irá conter os arquivos do projeto. 

Criar o arquivo `server.ts` que irá definir a porta que será escutada. O básico é:
```tsx
import express from 'express';

const app = express();

app.listen(3333, () => console.log("Server is running"));
```

Qualquer arquivo pode ser executado pelo terminal utilizado o comando:
```bash
$ node nome_do_arquivo.js
```

Porém como o node não entende a sintaxe de `import` é necessário haver um tradutor para converter typescript em javascript, para isso é necessário instalar o typescript:
```bash
$ yarn add typescript -D
```

E agora inicializamos o typescript dentro da aplicação:
```bash
$ yarn tsc --init 
```

Será criado um arquivo `tsconfig.json` e nele será possível configurar o typescript de acordo com a sua necessidade.

Agora é necessário instalar o `ts-node-dev` que irá traduzir o typescript para javascript:
```bash
$ yarn add ts-node-dev -D
```

Agora adicionamos um script no `package.json`:
```json
"scripts": {
	"dev": "ts-node-dev src/server.ts"
},
```

Isso faz com que ao rodar o comando `$ yarn dev` o `ts-node-dev` execute o nosso arquivo `server.ts` já o traduzindo para javascript.

Caso haja alguma aplicação rodando em node é só utilizar o comando:
```bash
$ pkill node
```

No script em que falei anteriormente, é possível passar algumas configurações como o `--transpile-only` para não fazer a checagem de tipagem já que o próprio VSCode vai acusar o erro. O `--respawn` serve para que o ts-node-dev fique observando alterações do código, para fazer o recarregamento automático da aplicação. A próxima flag é o `--ignore-watch node_modules` fazendo com que a pasta node_modules seja ignorada. Ao final o script ficará assim:
```json
"scripts": {
	"dev": "ts-node-dev --transpile-only --respawn --ignore-watch node_modules src/server.ts"
},
```

Com isso temos a estrutura inicial do nosso projeto. Nos próximos posts mostrarei como configurar o eslint e o prettier para manter um estilo de código, como configurar o typeorm e mongodb na nossa aplicação. Te vejo em breve! Obrigado pela leitura até aqui.