Como um desenvolvedor gosto de experimentar diversas linguagens. Já faz um bom tempo desde a última vez que fiz algum com Typescript, porém hoje estive trabalhando em um projeto e tive uma enorme dificuldade para conseguir gerar a build em javascript
O interessante é que o código funciona corretamente no ts-node, porém ao executar o tsc e utilizar o nodejs surge o erro MODULE_NOT_FOUND
Nessa hora entendi que era um problema com os imports pois não é a primeira vez que me deparo com esse problema. No entanto nada aparentava erro no meu VSCode…
...nem no tsconfig.js
Quando fui dar uma olhada no script de dev e start, lembrei do tsconfig-paths o qual eu havia configurado no início do projeto para resolver os caminhos relativos dis imports. Com isso, dei uma pesquisada e descobri que ele pode ser utilizado não apenas no ts-node e ts-node-dev, mas também no próprio node.
Assim, resolvi testar uma nova build, mas agora passando os parametros abaixo para o node:
ts-node/register/transpile-only - transpila arquivos TypeScript em tempo de execução usando o ts-node
, sem realizar a verificação de tipo.
tsconfig-paths/register - registra os caminhos definidos no tsconfig.json
usando o tsconfig-paths
. Isso permite que o Node.js resolva os módulos usando os caminhos definidos no tsconfig.json
, dispensando a necessidade dos caminhos relativos.
O comando fica assim:
node -r ts-node/register/transpile-only -r tsconfig-paths/register ./dist/main.js
E não é que deu certo?
Nem tudo são flores…
Apesar de ser uma boa solução, pode não ser uma boa opção para ambientes de produção visto que há um aumento no consumo de memória devido aos modulos extras carregados pelo node. No entanto, não conseguir descobrir se o consumo escala de acordo com o tamanho da aplicação.
Node com caminhos relativos
Node com módulos adicionais
Depois de pesquisar muitas alternativas, descobri o pacote tsc-alias que simplifica toda essa questão de resolução de módulos no typescript vs runtime.
Após adicioná-lo ao projeto, basta buildar o projeto normalmente com o tsc e na sequencia executar o comando tsc-alias. Você também pode adicionar o comando ao script de build no package.json.
Olha como ficou a utilização de memória.
Espero que tenham gostado ❤
Valeu pessoal!
justkey007 / tsc-alias
Replace alias paths with relative paths after typescript compilation
tsc-alias
Replace alias paths with relative paths after typescript compilation. You can add aliases that reference other projects outside your tsconfig.json project by providing a relative path to the baseUrl.
Comparison to tsconfig-paths
+ Compile time (no runtime dependencies)
Getting Started
First, install tsc-alias as devDependency using npm.
npm install -g tsc-alias
npm install --save-dev tsc-alias
Add it to your build scripts in package.json
"scripts": {
"build": "tsc --project tsconfig.json && tsc-alias -p tsconfig.json",
}
================ OR ===================
"scripts": {
"build": "tsc && tsc-alias",
"build:watch": "tsc && (concurrently \"tsc -w\" \"tsc-alias -w\")"
}
Issues
If you have an issue, please create one. But, before:
- try to check the FAQ.
- try to check if there exits alike issues.
- try to run with
--debug
and check if config is correctly loaded and all sourcefiles…
Top comments (0)