Skip to content

Instantly share code, notes, and snippets.

@farnetani
Last active May 10, 2020 13:27
Show Gist options
  • Save farnetani/88fd3e19e4ab9c53b609be7dfae3e066 to your computer and use it in GitHub Desktop.
Save farnetani/88fd3e19e4ab9c53b609be7dfae3e066 to your computer and use it in GitHub Desktop.
typescript-configurando-dependencias

Configurando Dependências Typescript

Fonte: https://www.udemy.com/course/tdd-com-mango/learn/lecture/17664692#overview

https://www.conventionalcommits.org/en/v1.0.0/

Configurando o git-commit-msg-linter

npm i -D git-commit-msg-linter
# Cria um hook por trás dos panos no git e sempre que dermos um commit ele irá validar a nossa msg para ver se está dentro dos padrões do convetionalcommits.org.

Instalar a extensão no vscode/theia: https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits

Instalar no webstorm: https://github.com/lppedd/idea-conventional-commit

https://plugins.jetbrains.com/plugin/14046-commitlint-conventional-commit

plugins > search marketplace : Conventional Commit

Types: fix, feat, build, chore, ci, docs, style, refactor, perf, test.

Tradução: corrigir, façanha, construir, tarefa, refatorar, ...

Podemos usar também scope através do parenteses: feat(parser): add ability to parse arrays.

Não vamos usar scope, body e nem footer.

chore - é muito usado quando adicionamos uma lib nova.

Exemplo: chore: add npm

Não usar verbos no gerundio ou passado, sempre no imperativo. Nunca usar adding ou added, sempre add.

https://www.conjugacao.com.br/verbos-no-imperativo/

O imperativo é um dos modos verbais, juntamente com o modo indicativo e o modo subjuntivo. No modo imperativo a pessoa falante leva o seu interlocutor a realizar uma ação, expressando o que quer que ele faça. 

Assim, a ação transmitida por um verbo no imperativo é um pedido, convite, exortação, ordem, comando, conselho ou súplica.

O imperativo se divide em imperativo afirmativo e imperativo negativo, sendo conjugados de forma diferente. Em ambos não existe flexão na 1.ª pessoa do singular (eu).

Configurando o Typescript**

Typescript: linguagem compilada. Então é um superset do javascript. Podemos adicionar tipagem na linguagem javascript. Ajuda bastante a não cometermos erros. Permite que usemos recursos do javascript que ainda não foram disponibilizados no javascript, EcmaScript2020 pode ser utilizado por exemplo, pois na maioria das vezes o typescript já possui.

npm i -D typescript @types/node

O @types/node adiciona tipagem

Criar o arquivo tsconfig.json

{
    "compilerOptions": {
        "outDir": "./dist",
        "module": "commonjs", // Força o typescript quando for gerar o javascript gerar na versão antiga dos imports da vida = require para que os navegadores entendam.
        "target": "es2019",
        "esModuleInterop": true,  // Para fazer uma conversão do import para require
        "allowJs": true // Para arquivos de configuraçao em javascript ao invés de json
    } 
}

Para se ver as novidades e suporte das versões do nodejs: https://node.green/

Standard Style

Iremos utilizar o eslint-config-standard-with-typescript, para isso deveremos instalar:

https://github.com/standard/eslint-config-standard-with-typescript

npm install --save-dev eslint@6 eslint-plugin-standard@4 eslint-plugin-promise@4 eslint-plugin-import@2 eslint-plugin-node@11 @typescript-eslint/eslint-plugin@2 eslint-config-standard-with-typescript

Um outro ponto importante é desabilitar o plugin standardjs caso tenha instalado o mesmo no vscode para não conflitar com o plugin eslint. Quando formos desabilitar, podemos desabiliar no workspace.

Criar o arquivo .eslintrc.josn

{
    "extends": "sandard-with-typescript",
    "parserOptions": {
        "project": "./tsconfig.json"
    }
}

Standard-Version (COISA MINHA)

npm i -D standard-version
ou
npm i -g standard-version

Adicionar no package.json

{
  "scripts": {
    "release": "standard-version"
  }
}

Comandos para rodar

# npm run script
npm run release -- --first-release
# global bin
standard-version --first-release
# npx
npx standard-version --first-release

Aí para publicar, precisamos estar logados no npm

npm whoami

Para logar-se no npm

npm adduser 
# Preencher os dados de login: farnetani, senha e email = farnetani@gmail.com

Aí para publicar a RELEASE (npm run release) tem que executar o comando:

git push --follow-tags origin master && npm publish

OBS: não pode esquecer de se logar-se no npm (npm adduser e npm whoami pra ver se deu certo)

Adicionar o .gitignore

node_modules
dist
coverage
data
!src/data
.vscode
.idea

Instalar o Husky

Para criarmos hooks antes do commit. Podemos colocar comandos antes do commit ou antes do push.

npm i -D husky

Criar o arquivo huskyrs.json

{
  "hooks":  {
    "pre-commit": "eslint"
  }
}

Vamos usar o husky com outra lib para tratar filtros. Ele permite que rodemos a validação apenas nos arquivos staged (add --all).

npm i -D lint-staged

Criar o arquivo .lintstagedrc.json

{
  "*.ts": [
    "eslint 'src/**' --fix",
    "npm run test:staged", 
    "git add" 
  ]
}

Não esquecer de criar o script : "test:staged": "jest

Reeditar o arquivo .huskyrc.json

{
  "hooks":  {
    "pre-commit": "lint-staged"
  }
}

Testes

npm i -D jest @types/jest ts-jest

jest init 
ou
./node_modules/.bin/jest --init

Y
node
yes

Será criado o arquivo jet.config.js na raiz do projeto

  roots: ['<rootDir>/src'],
  collectCoverageFrom: ['<rootDir>/src/**/*.ts'],
  coverageDirectory: 'coverage',
  testEnvironment: 'node',
  transform: {
    '.+\\.ts$': 'ts-jest' // Expressão regular que fala que qualquer texto/arquivo terminado com .ts vai rodar o ts-jest
  }

RESUMO

  • git-commit-msg-linter : Cria um hook por trás dos panos no git e sempre que dermos um commit ele irá validar a nossa msg para ver se está dentro dos padrões do convetionalcommits.org.
  • typescript : instalação.
  • eslint-config-standard-with-typescript : eslint para typescript.
  • hustky - npmjs.com/package/husky : permite que coloquemos hooks para o nosso git. Criar o arquivo .huskyrc.json.
  • lint-staged - lib para fazer a validação apenas nos arquivos staged. Criar o arquivo .lintstagedrc.json.

.gitignore

node_modules
dist
coverage
data
!src/data
.vscode
.idea

tsconfig.json

{
    "compilerOptions": {
        "outDir": "./dist",
        "module": "commonjs",
        "target": "es2019",
        "esModuleInterop": true,
        "allowJs": true
    }
}

.huskyrc.json

{
  "hooks":  {
    "pre-commit": "lint-staged"
  }
}

.intstagedrc.json

{
  "*.ts": [
    "eslint 'src/**' --fix",
    "npm run test:staged", // Criar o script no package.json como test:staged
    "git add"
  ]
}

package.json

  ...
  "scripts": {
    "test": "jest",
    "test:staged": "jest",
    "release": "standard-version"
  },
  ...

jest.config.js

// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html

module.exports = {
  roots: ['<rootDir>/src'],
  collectCoverageFrom: ['<rootDir>/src/**/*.ts'], // path  de onde irei pegar os arquivos de teste
  coverageDirectory: "coverage",
  transform: {
    '.+\\.ts$': 'ts-jest' // Expressão regular que fala que qualquer texto/arquivo terminado com .ts vai rodar o ts-jest
  }
};

Exemplo de teste: src\controller.spec.ts

describe('', () => {
  test('test-jets', () => {
    expect(1).toBe(1)
  })
})
npm i -D git-commit-msg-linter

npm i -D typescript @types/node

npm install --save-dev eslint@6 eslint-plugin-standard@4 eslint-plugin-promise@4 eslint-plugin-import@2 eslint-plugin-node@11 @typescript-eslint/eslint-plugin@2 eslint-config-standard-with-typescript

npm i -D standard-version
ou
npm i -g standard-version

npm i -D husky
npm i -D lint-staged
npm i -D jest @types/jest ts-jest
./node_modules/.bin/jest --init

Dica de git como juntar algumas modificações ao último commit:

## Junta essas mudanças no último commit e use o mesmo texto anterior e não abra o editor
git commit --amend --no-edit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment