Template de projeto
NodeJS - Template de projeto
Esse repositório é um template extremamente completo para um projeto de NodeJS com JavaScript, incluindo as seguintes ferramentas:
Prettier
Formatação de código com Prettier, garantindo padrão de código
Arquivo de configuração do Prettier bem completo
ESLint
Formatação de código com ESLint, garantindo qualidade no código
Arquivo de configuração do ESLint bem completo
Visual Studio Code
Suporte e configuração total ao VSCode
WebStorm
Suporte e configuração total para o WebStorm ou IDEs da Jetbrains num geral
Husky, Lint-Staged e Pretty-Quick
Garantindo que todas as validações são feitas antes de entrar no GitHub (funciona com GitLab, BitBucket, ou qualquer sistema Git que você usa)
Git Ignore
Arquivo
.gitignorebem completo, considerando VSCode, Webstorm (IDEs da JetBrains num geral), NodeJS, com uma modificação para que aceite os arquivos de configuração de IDEs específicas
Correção de final de linha dos arquivos
Geralmente muitas equipes possuem problema com devs que usam Linux, Mac e Windows, pelos sistemas tratarem diferente os finais de linha de arquivo.
Isso está corrigido nesse template, forçando os finais de linha de arquivos sempre como , padrão utilizado pelos sistemas baseados em Unix (Linux e Mac), sem afetar nada a utilização/modificação dos arquivos por quem usa Windows
Utilização do template
1ª opção
Você pode criar um repositório seu utilizando esse template de projeto clicando no link acima Use this template.
2ª opção
Também e possível acessar diretamente o link https://github.com/FabricaDeSinapse/nodejs-template/generate.
Aplicando esse template em um projeto existente
Caso você queira aplicar as mesmas coisas que estão disponíveis nesse template, mas em um projeto seu que já existe, você pode seguir os passos nos capítulos a seguir.
Criação do projeto
Caso já tenha o projeto criado, pule este passo.
Crie uma nova pasta com o nome do projeto;
Abra a pasta com o Visual Studio Code;
Abra o Terminal do VSCode;
Inicie o projeto Node, gerando o
package.json, digitando no terminal:Criação do
package-lock.json:Crie uma pasta na raiz do projeto chamada
srce crie um arquivo dentro chamadosrc/main.js;Coloque um código para testar:
Crie o projeto no Git via GitHub Desktop ou da forma que achar melhor.
Instalar e Configurar o Prettier
Instale o
prettierno projeto:Instale a extensão do
prettierno VSCode;ID da extensão:
esbenp.prettier-vscode
Crie uma pasta na raiz do projeto chama
.vscodecom um novo arquivo chamadosettings.jsonColoque o seguinte conteúdo no arquivo
settings.json:Hora de testar o
prettier, digite algo nosrc/main.jse salve com oCtrl + SHabilite o auto save do VSCode, clicando em
File > Auto Save.Note que o auto save não formata o código, só quando usamos o
Ctrl+Sdiretamente.
Configurando EOL e Git Ignore/Attributes
No passo anterior, quando adicionamos uma configuração no settings.json, indicamos para o VSCode utilizar final de linha (end-of-line ou EOL) nos arquivos, também conhecido como LF, que é o caractere de EOL padrão dos sistemas Unix (Linux/Mac).
Geralmente isso dá bastante conflito com quem usa windows, que usa o EOL CRLF, que representa \r. Para evitar conflitos no futuros, iremos marcar o repositório git para sempre versionar arquivos usando o EOL LF.
Abra o arquivo
.gitattributese adicione o seguinte conteúdo:Abra o site https://gitignore.io/ e digite na busca
Node,JetBrains,VisualStudioCodee clique emCreate;Isso irá gerar o conteúdo do arquivo do
gitignorepara nós, contemplando as IDEs da JetBrains (WebStorm, no caso do JS), o VSCode e os arquivos do projeto Node;
Copie o conteúdo do link gerado;
No meu caso, o link foi: https://www.toptal.com/developers/gitignore/api/jetbrains,visualstudiocode,node
Você também pode pegar conteúdos de arquivos
.gitignoreno projeto oficial do GitHub: https://github.com/github/gitignore
Faça um commit do progresso atual e suba as modificações na nuvem.
Modificando estilização padrão do Prettier
Crie um arquivo na raiz do projeto chamado
.prettierrc.jsone coloque o seguinte conteúdo:Com o arquivo de configuração do
prettierestando no formato JSON é possível usar o atalhoCtrl + Espaçopara ter um autocomplete com os nomes das chaves que oprettieraceita;Volte para o arquivo
main.jse apenas salve com oCtrl + S;Note que o
quotemuda de aspas duplas para aspas simples.
Crie uma condição grande, como o código a seguir:
Salve o arquivo com o
Ctrl + S;Note que os operadores ficam na direita por padrão.
Para corrigir isso, vamos utilizar o fork
@btmills/prettier;
https://www.npmjs.com/package/@btmills/prettier
Abra o arquivo
package.json;Rode o seguinte comando no terminal:
Volte para o arquivo
main.jse salve novamente;Note que os operadores vão para a esquerda.
Faça um commit com progresso atual.
Formatando o projeto inteiro e ignorando arquivos
Além de apertar o
Ctrl + Spara formatar o código atual, também é possível executar um comando pelo terminal para aplicar oprettier.O comando para aplicar no projeto inteiro é:
Mais informações sobre a CLI do
prettier, acesse: https://prettier.io/docs/en/cli.html
Ao executar o comando, note que diversos arquivos recebem as modificações. Arquivos com o nome em branco foram formatados e arquivos em cinza escuro não foram.
No casos de projetos que possuem uma pasta com o arquivo compilado ou até mesmo arquivos que não são do projeto em si, mas estão na mesma pasta, é interessante configurar o prettier para ignorá-los.
Crie uma pasta chamada
distcom um arquivo dentro chamadobuild.js;Geralmente arquivos compilados ficam em uma pasta chamada
dist,buildoubin.
Adicione o seguinte conteúdo no arquivo:
Note que ao salvar o arquivo com o
Ctrl + S, oprettieraplica a formatação.
Aperte
Ctrl + Zpara desfazer a formatação aplicada.Experimente rodar o seguinte comando no terminal.
Note que ele considera o novo arquivo criado:
É bem importante ter em mente que o comando
npxsó funciona caso o computador tenha conexão com a internet. Caso queira executar os comandos offline, é necessário instalar as dependências de maneira global, usando o comando:
Abra o arquivo
dist/build.jse dêCtrl + Znovamente para desfazer a formatação aplicada pelo comando.Para ignorar essa pasta, crie um arquivo na raiz do projeto chamado
.prettierignore;Adicione o seguinte conteúdo:
Isso irá ignorar pastas que comecem com a palavra
buildouBuild.Por exemplo:
build_v1também será ignorada.
Volte para o arquivo
dist/build.jse salve o arquivo novamente. A formatação não será aplicada.Executando o comando do
prettiernovamente.Note ele passa a ignorar os arquivos indesejados:
Para finalizar, o comando de execução do prettier pode virar um script do npm, para executar sempre que quiser formatar o projeto inteiro.
Abra o arquivo
package.jsone procure pela chavescripts. Substitua o script detestpelo seguinte conteúdo:
Encontrando e corrigindo problemas no código
Além da estilização de código pelo prettier, é possível encontrar e corrigir possíveis problemas. Um problema clássico do JavaScript é a comparação de variáveis utilizando apenas dois iguais, que compara apenas a informação da variável, sem validar o tipo dessa informação.
Por exemplo: '2' representa uma string contendo o número 2, sendo diferente do que ter direto o 2 representado como number. No entanto, as comparações usando == e === trazem resultados diferentes:
'2' == 2 -> True'2' === 2 -> False
As vezes esquecemos desse detalhe a IDE deveria nos ajudar informando esse problema de checagens não darem o resultado esperado. Uma forma de integrar isso no nosso projeto é usando o ESLint (https://eslint.org/), uma biblioteca que possibilita uma série de configurações e validações.
Abra o arquivo
main.jse adicione o seguinte conteúdo:Instale o ESLint com o comando:
Em seguida, inicialize o ESLint através do comando:
Selecione as seguintes opções:
To check syntax, find problems, and enforce code styleCommonJS (require/exports)None of theseNoNodeUse a popular style guideAirbnbJavaScriptYes
Instale a extensão do ESLint para o VSCode;
Isso fará com que o save através do
Ctrl + Stambém aplique as modificações do ESLint;
Abra o arquivo
main.js;Note os erros que o ESLint passa a exibir.
Abra o arquivo
.eslintrc.jse troque a configuração que foi gerada automaticamente pelo seguinte conteúdo:Abra o arquivo
main.jse bagunce a formatação do arquivo, colocando uma aspa dupla, parênteses a mais, tabs a mais, etc.Perceba que o ESLint marca tudo aquilo que está fora do padrão como sendo um erro
Rode o comando:
Isso irá corrigir diversos problemas apontados pelo link, mas um deles não será corrigido, o
eqeqeq:Como esse problema altera a maneira que o código executa, o ESLint não faz a alteração, ele apenas avisa que você precisa realizá-la.
Corrija os problemas e execute o comando novamente;
Com isso, nenhuma mensagem aparecerá no console.
Faça um commit do progresso atual.
Automatizando o processo no commit
Além realizar todo o processo via linha de comando ou no Ctrl + S, é possível automatizar isso sempre que um novo commit for feito.
Para isso, utilizaremos as bibliotecas
huskyelint-staged.O
npm huskypermite a execução de comandos a partir dos eventos dogitcomopre-commit,pre-pushetc.No meu caso, a versão do
husky 5apresentou alguns problemas, então o comando mencionado anteriormente deve instalar a versão mais recente dohusky 4.
O
lint-stagedpermite com que você execute comandos em arquivos que estão nostagedo repositóriogit, para evitar com que eles entrem no seu projeto sem as validações necessárias.
Além das duas bibliotecas mencionadas, precisamos instalar uma terceira biblioteca chamada
pretty-quick, que permite a execução doprettiervia linha de comando apenas para arquivos que estão nostaged, ou seja, que estão sendo considerados nocommitque está sendo criado.Com isso, abra o arquivo
package.jsone, logo após a chavescripts, adicione o seguinte conteúdo:Note que adicionamos a linha
npx pretty-quick --stagedque executa oprettierpara os arquivos nostagedo Git.
Para testar, abra o arquivo
src/main.jse realize algumas modificações que vão contra o estilo doprettiere doESLint, mas que não quebram o código, como a modificação doeqeqeqque vimos anteriormente.Também é importante ignorar alguns arquivos para o
ESLint. Crie um arquivo na raiz do projeto chamado.eslintignoree adicione o seguinte conteúdo:Vá no terminal e digite
git status.Adicione as modificações em
stagecom o comandogit add .Confirme que deu certo com ogit statusexibindo o seguinte resultado:Abra o arquivo
src/main.jsantes de realizar ocommitpara observar as modificações de formatação.Crie um commit através do comando:
O
commitserá realizado e ohusky/lint-stageddevem entrar em ação:
Commit via GitHub Desktop, VSCode, WebStorm
Com os hooks configurados no projeto, independente de qual sistema seja usada para criação dos commits, o lint-staged será executado. Experimente fazer os commits pelo GitHub Desktop, VSCode Source Control ou pelo VCS do WebStorm.
Conclusão
Com essa configuração, o projeto está preparadíssimo para o desenvolvimento em NodeJS com JavaScript. As configurações apresentadas são resultados de alguns anos trabalhando com NodeJS e diversos problemas enfrentados como:
Equipe usando diferentes IDEs no mesmo ambiente (Visual Studio Code, WebStorm, etc)
Diferentes sistemas operacionais (Linux, Mac e Windows)
Formatação de código gerado pelo sistema ou códigos de bibliotecas
Erros ao realizar o commit pelo
gitno terminal, GitHub Desktop ou pelas próprias IDEsPadronização de código ficava diferente dependendo da IDE que a pessoa usava
Extensas discussões sobre qual padrão de código usar e como melhorar a leitura dos projetos. O padrão apresentado nesse template é uma sugestão, modifique da forma que achar melhor.
Last updated
Was this helpful?