Closed guilima closed 4 years ago
required
para import
.
Necessário instalar dependência do typescript e seu executor/transpiler para node: ts-node. Além disso, precisa criar o arquivo tsconfig para compilar o código para js corretamente. Nele configurei:
{
"compilerOptions": {
...
"outDir": "dist",
"lib": ["ES2020"],
"module": "CommonJS",
"target": "ES2019",
"moduleResolution": "node",
"removeComments": true,
"esModuleInterop": true
},
"include": [
"index.ts",
"update-monthly.scheduled.ts"
]
}
include
, a partir daí a reação é em cadeia e todos os imports também vão juntos.target
. Nesse caso para evitar carregamento de outras libs adicionei apenas as features da versão mais recente do ecmascript, repetindo assim o valor do target.type
com valor module
, apenas dava um warning ao executar o projetom, contudo após a atualização passou dar erro devido incompatibilidade com o que era selecionado nessa propriedade do tsconfig.module
, porém devido a inconsistência, recomendo adiciona-lo com valor "Node".{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@business/*": ["src/business/*"],
"@data/*": ["src/data/*"],
"@middleware/*": ["src/middleware/*"],
"@routes/*": ["src/routes/*"],
"@schema/*": ["src/schema/*"],
"@services/*": ["src/services/*"],
"@util/*": ["src/util/*"],
"*": ["node_modules/*"]
},
...
}
Agora pensa numa configuração chata para os ambientes dev/prod funcionarem corretamente. É um combinação do que vai rodar no ambiente de desenvolvimento com o mapeamento dos nomes dos arquivos em tempo real (runtime). Em produção só muda que os arquivos precisam ter os nomes trocados em tempo de compilação (compiler).
npm run debug
para desenvolvimento local com auto reload foi utilizado a lib nodemon e criado o arquivo nodemon.json. No script de execução basta chamar nodemon que ele executa as configs no nodemon.json por padrão. Configuração:
{
"verbose": false,
"debug": false,
"exec": "node --inspect -r dotenv/config -r ts-node/register -r tsconfig-paths/register ./index.ts",
"ignore": [
"node_modules",
"./test",
"**/*.d.ts",
"*.test.ts",
"*.spec.ts",
"fixtures/*",
"test/**/*",
"docs/*"
],
"watch": ["./src"],
"ext": "ts, gql"
}
Para rodar local com typescript além das variáveis de ambiente instalei a lib tsconfig-paths
para que altere os caminhos absolutos dos arquivos importados. As propriedades não tem muito segredo por isso vou apenas detalher o valor encontrado na exec
:
node -- inspect
: Permiti inicialização do vscode launch e debug pela mesma ferramente-r dotenv/config
: Carrega modulo configurar as variáveis de ambientes, runtime-r ts-node/register
: Carrega modulo permite ler arquivos em typescript, runtime-r tsconfig-paths/register
: Carrega modulo permite alterar caminhos absolutos, runtime./index.ts
: Arquivo a ser inicializadots-node
nem tsconfig-paths
. Unicamente utilizou-se o dotenv, pois é o momento mais oportuno para carregamento de variáveis de ambiente. O script npm run build
:
"tsc --project tsconfig.json && tscpaths -p tsconfig.json -s ."
tsc --project tsconfig.json
: Do próprio typescript compila os arquivos seguindo as configurações indicados pelo parâmetro project
, ou seja tsconfig.json. Por default o tsc já faz isso, apenas sendo usado explicitar.&&
: Em sequencia executar proxima ação.tscpaths -p tsconfig.json -s .
: Instalado dependência (caseira) tscpaths
que utiliza configuração do tsconfig.json com source na raiz. Dessa forma no momento de compilar para .js os caminhos absolutos são trocados.Após o momento de compilação completo é possível executar o script npm start
:
"node -r dotenv/config dist/index.js"
Sobe servidor node pelo arquivo index, carregando antes o modulo de variáveis de ambiente.
Para me manter atualizado e acompanhando a evolução de outras linguagens, comecei um estudo de como implementar typescript em um projeto nodejs. Pontos importantes:
[x] 1. Mudar todos os
required
paraimport
.[x] 2. nstalar libs @type para cada dependência, se existir.
[x] 3. Configurar caminho absoluto dos arquivos importados.
[x] 4. Ajustar ambiente dev com nodemon + typescript.
[x] Ajustar ambiente prod para o build.
[x] 5. Ajustar ambiente prod para o build.
[x] 6. Tipagem do código e criação de interfaces.