{"id":19849129,"url":"https://github.com/brxlx/setup-node-ts","last_synced_at":"2026-01-03T05:05:26.451Z","repository":{"id":123037974,"uuid":"280247106","full_name":"Brxlx/setup-node-ts","owner":"Brxlx","description":"Basic environment setup with ts-node-dev, eslint, jest and babel","archived":false,"fork":false,"pushed_at":"2023-03-05T06:15:44.000Z","size":697,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-22T14:23:08.510Z","etag":null,"topics":["babel","javascript","jest","nodejs","typescript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Brxlx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-16T20:03:12.000Z","updated_at":"2023-08-22T15:04:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"63278245-2928-446c-b3de-c34e0c3b9e24","html_url":"https://github.com/Brxlx/setup-node-ts","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brxlx%2Fsetup-node-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brxlx%2Fsetup-node-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brxlx%2Fsetup-node-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Brxlx%2Fsetup-node-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Brxlx","download_url":"https://codeload.github.com/Brxlx/setup-node-ts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243812153,"owners_count":20351839,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["babel","javascript","jest","nodejs","typescript"],"created_at":"2024-11-12T13:19:25.401Z","updated_at":"2026-01-03T05:05:26.376Z","avatar_url":"https://github.com/Brxlx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## SETUP DE PROJETO NODE.JS COM TYPESCRIPT E ESLINT\n---\n\u003e Inicializar projeto\n\n`Npm init -y ou yarn init -y`\n\n\u003e Instalar TypeScript como dependência de desenvolvimento\n\n`yarn add typescript`~~@version~~` -D`\n\n```typescript\nconst a:number = 2; // :D\n```\n\u003e Gerar arquivo `tsconfig.json`\n\n`yarn tsc --init`\n\n\u003e Adicionar tipagem de dependências\n\n`yarn add @types/_dependency_ -D`\n\n\u003e Compilar js de produção\n\n`yarn tsc`\n\n\u003e Adicionar *library* de compilação TS -\u003e JS\n\n```bash\n yarn add ts-node-dev -D // Aceita decorators, auto-restart, etc.\n ```\n\n \u003e Criar script de execução do compilador\n\n ```bash\n \"dev\":\"ts-node-dev --respawn --transpile-only --ignore-watch --no-notify src/server.ts\"\n ```\n \u003e Arquivo _tsconfig.json:_\n\n- Setar diretórios de arquivos-fonte e arquivos compilados:\n ```\n  \"outDir\": \"./dist\",\n  \"rootDir\": \"./src\",\n ```\n\n- Ignorar pasta dos arquivos compilados:\n\n ```git\n    dist em .gitignore\n ```\n\n- Para projetos node, setar uma _target_ maior (p.e: __es6__ ou __es2017__):\n    - `\"target\":\"es2017\"`\n\n- Permitir arquivos js (migração ou libs sem suporte a ts):\n    - `\"allowJs\": true`\n\n- Lib ES6:\n    - `\"lib\": [\"ES6\"]`\n\n- Remover comentários:\n    - ` \"removeComments\": true`\n\n- Desabilitar _strict_:\n    - `// \"strict\": true`\n\n- Se for usar _decorators_:\n     ```typescript\n     \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n     ```\n\n- Sobrescrever diretórios de _libs_:\n    ```json\n    \"typeRoots\": [\n      \"./node_modules/@types\",\n      \"./src/@types\"\n    ]\n    ```\n\n- Habilitar importação de arquivos JSON:\n\n     `\"resolveJsonModule\": true,`\n\n\u003e Paths\n\n- Configurar _paths_ manuais:\n    ```json\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@controllers/*\": [\"./src/controllers/*\"],\n      \"@models/*\": [\"./src/models/*\"],\n      \"@config/*\": [\"./src/config/*\"]\n    }\n    ```\n- Instalar dependência para leitura dos _paths_:\n\n    `yarn add tsconfig-paths -D`\n\n\u003e ESLint\n\n- Instalar eslint como dependência de desenvolvimento\n\n    `yarn add eslint -D`\n\n- Inicializar eslint e configurações\n\n    `yarn eslint --init`\n\n- Se utilizar yarn, adicionar dependências manualmente como dependências de desenvolvimento\n\n    `yarn add [...] -D`\n\n- Para _styleGuide_ do __Airbnb__, adicionar:\n\n    `yarn add eslint-import-resolver-typescript -D`\n\n- E no `.eslintrc.json`:\n\n    ```\n    \"settings\": {\n          \"import/resolver\": {\n            \"typescript\": {} // this loads \u003crootdir\u003e/tsconfig.json to eslint\n          }\n        }\n    ```\n\n\u003e Prettier\n\n- Adicionar bibliotecas:\n\n  `yarn add -D prettier eslint-plugin-prettier eslint-config-prettier`\n\n- Adicionar arquivo `prettier.config.js` .\n\n- Adicionar no arquivo `.eslintrc.json`:\n\n  ```\n  \"extends\": [\n        ...\n        \"prettier/@typescript-eslint\",\n        \"plugin:prettier/recommended\"\n    ],\n\n    \"plugins\": [\n      ...\n      \"prettier\",\n  ],\n  ```\n  \n  ***Edit\n  - Se a versão do pacote eslint-config-prettier \u003e 8.0.0 :\n  ```\n  \"extends\": [\n      [...],\n      \"prettier\", // \u003c-\n      \"plugin:prettier/recommended\" \u003c-\n  ],\n  ```\n\n\u003e JEST\n\n- Adicionar jest:\n\n    `yarn add jest -D`\n\n- Inicializar arquivo de configuração:\n\n    `yarn jest --init`\n\n- Adicionar pacote para funcionalidade com typescript:\n\n    `yarn add ts-jest -D`\n\n- Adicionar tipagem do jest:\n\n    `yarn add @types/jest -D`\n\n    - No arquivo `jest.config.js`, adicionar:\n\n        `preset: 'ts-jest'`\n\n    - No arquivo `.eslintrc.json`:\n\n        - `\"jest\":true` em `env`\n\n- Executar teste:\n\n    `yarn test`\n\n- Adicionar custom _paths_:\n\n    - Adicionar, no arquivo `jest.config.ts`:\n\n        ```\n        const { pathsToModuleNameMapper } = require('ts-jest/utils');\n\n        const { compilerOptions } = require('./tsconfig.json');\n        \n        // Em moduleNameMapper\n         moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '\u003crootDir\u003e' }),\n        ```\n\n    - Adicionar, no arquivo `tsconfig.json`:\n\n        ```\n        \"include\": [\n        \"src/**/*\"\n         ]\n        ```\n\n    - Para o compilador do jest funcionar, criar um novo arquivo, `tsconfig.jest.json`, p.e., copiando os valores do tsconfig.json padrão, __sem NENHUM comentário!__\n\n        - Para ignorar arquivos `.js`, colocar dentro do `jest.config.json`:\n\n            ```\n            testMatch: ['**/__tests__/**/*.ts?(x)', '**/?(*.)+(spec|test).ts?(x)']\n            ```\n\n    ### _Interessante utilizar uma base de dados somente para os testes!!! (e.g SqLite)_\n\n\u003e Babel\n\n- Adicionar pacotes do Babel e suas dependências:\n\n    `yarn add -D @babel/cli @babel/core @babel/node @babel/preset-env @babel/preset-typescript babel-plugin-module-resolver @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties babel-plugin-transform-typescript-metadata`\n\n- Criar arquivo de configuração do babel `babel.config.js`\n\n    ```javascript\n\n    module.exports = {\n    presets: [\n        [\n        '@babel/preset-env',\n        {\n            targets: {\n            node: 'current',\n            },\n        },\n        ],\n        '@babel/preset-typescript',\n    ],\n    plugins: [\n        ['module-resolver', {\n        alias: {\n            '@controllers': './src/controllers',\n            '@models': './src/models',\n            '@config': './src/config',\n        },\n        }],\n        ['@babel/plugin-proposal-decorators', { legacy: true }],\n        [\"@babel/plugin-proposal-class-properties\", { loose: true }],\n        'babel-plugin-transform-typescript-metadata',\n    ],\n    ignore: [\n        '**/*.spec.ts', // Ignora arquivos de testes no bundle\n    ],\n    };\n\n   ```\n\n- Por fim, criar script de build no `package.json`:\n\n    `\"build\": \"babel src --extensions \\\".js,.ts\\\" --out-dir dist --copy-files --no-copy-ignored\"`\n\n\u003e Script de produção\n\n- Executar código de produção:\n\n    `\"prod\":\"node dist/server.js\"`\n\n\n\u003e Import Helpers\n\n- Para pernonalizar a ordem e organização de importação das dependências e módulos:\n\n    `yarn add -D eslint-plugin-import-helpers`\n\n- No arquivo `.eslintrc.json`:\n\n    ```json\n    \"plugins\": [\n        \"@typescript-eslint\",\n        \"eslint-plugin-import-helpers\"\n    ],\n    \"rules\": {\n        \"import-helpers/order-imports\": [\n            \"warn\",\n            {\n              \"newlinesBetween\": \"always\", // new line between groups\n              \"groups\": [\n                  \"module\",\n                  \"/^@server\\/shared/\",\n                  \"/^@/\",\n                  [\"parent\", \"sibling\", \"index\"]\n              ],\n              \"alphabetize\": { \"order\": \"asc\", \"ignoreCase\": true }\n            }\n          ]\n    }\n\n    ```\n\n\u003e Debug\n\n- Criar arquivo `launch.json` dentro da pasta `.vscode` na raiz do projeto:\n\n    ```json\n    {\n    \"configurations\": [\n        {\n            \"type\": \"node\",\n            \"request\": \"attach\",\n            \"name\": \"Launch Program\",\n            \"skipFiles\": [\n                \"\u003cnode_internals\u003e/**\"\n            ],\n            \"protocol\": \"inspector\",\n            \"restart\": true\n        }\n        ]\n    }\n   ```\n\n- Como o tsc em dev devidamente configurado, passar a flag _--inspect_ para poder atrelar ao _debugger_ no `package.json`:\n\n    ```json\n    \"dev\": \"ts-node-dev -r tsconfig-paths/register --inspect --respawn --transpile-only --ignore-watch --no-notify src/server.ts\"\n    ```\n\n- **Extra**: Se houver _warning_ de _DeprecationWarning (...) browser_, atualizar pacote `broweser-sync`:\n\n    `yarn upgrade browser-sync@2.26.7` ou superior.\n\n\n\u003e Editor Config\n\n- Criar arquivo `.editorconfig` para padronização de algumas configurações de uso geral do projeto.\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrxlx%2Fsetup-node-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrxlx%2Fsetup-node-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrxlx%2Fsetup-node-ts/lists"}