<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Charles Lima</title>
    <description>The latest articles on DEV Community by Charles Lima (@chlima88).</description>
    <link>https://dev.to/chlima88</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F405990%2F5b440b0a-81c8-4426-ad49-3bf354469551.jpg</url>
      <title>DEV Community: Charles Lima</title>
      <link>https://dev.to/chlima88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chlima88"/>
    <language>en</language>
    <item>
      <title>Typescript 🆚 NodeJS Runtime: Problemas e soluções na importação de módulos</title>
      <dc:creator>Charles Lima</dc:creator>
      <pubDate>Fri, 22 Mar 2024 18:10:47 +0000</pubDate>
      <link>https://dev.to/chlima88/typescript-nodejs-runtime-problemas-e-solucoes-na-importacao-de-modulos-3h14</link>
      <guid>https://dev.to/chlima88/typescript-nodejs-runtime-problemas-e-solucoes-na-importacao-de-modulos-3h14</guid>
      <description>&lt;p&gt;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&lt;/p&gt;

&lt;p&gt;O interessante é que o código funciona corretamente no &lt;em&gt;ts-node&lt;/em&gt;, porém ao executar o &lt;em&gt;tsc&lt;/em&gt; e utilizar o nodejs surge o erro &lt;code&gt;MODULE_NOT_FOUND&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7kw9z5w8pqpixk5lon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7kw9z5w8pqpixk5lon.png" alt="Imagem: Mensagem de erro Module Not Found" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauecbfjc7l5exkqn3mym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauecbfjc7l5exkqn3mym.png" alt="Imagem: Importações não utilizando caminhos relativos" width="628" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...nem no &lt;em&gt;tsconfig.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcmlpi3p35u3qxjz83ty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcmlpi3p35u3qxjz83ty.png" alt="Imagem: Configuração do arquivo tsconfig.json" width="406" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando fui dar uma olhada no script de dev e start, lembrei do &lt;em&gt;tsconfig-paths&lt;/em&gt; o qual eu havia configurado no início do projeto para resolver os caminhos relativos dis &lt;em&gt;imports.&lt;/em&gt; Com isso, dei uma pesquisada e descobri que ele pode ser utilizado não apenas no &lt;em&gt;ts-node&lt;/em&gt; e &lt;em&gt;ts-node-dev&lt;/em&gt;, mas também no próprio &lt;em&gt;node&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg8msi3payb93rv8ysak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsg8msi3payb93rv8ysak.png" alt="Imagem: Conteúdo do package.json" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assim, resolvi testar uma nova build, mas agora passando os parametros abaixo para o node:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ts-node/register/transpile-only -&lt;/em&gt; transpila arquivos TypeScript em tempo de execução usando o &lt;code&gt;ts-node&lt;/code&gt;, sem realizar a verificação de tipo.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;tsconfig-paths/register -&lt;/em&gt; registra os caminhos definidos no &lt;code&gt;tsconfig.json&lt;/code&gt; usando o &lt;code&gt;tsconfig-paths&lt;/code&gt;. Isso permite que o Node.js resolva os módulos usando os caminhos definidos no &lt;code&gt;tsconfig.json&lt;/code&gt;, dispensando a necessidade dos caminhos relativos.&lt;/p&gt;

&lt;p&gt;O comando fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -r ts-node/register/transpile-only -r tsconfig-paths/register ./dist/main.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;E não é que deu certo?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0suxfhu53qkfg0nsfkjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0suxfhu53qkfg0nsfkjr.png" alt="Imagem: Sucesso no teste do nodejs com os modulos carregados" width="616" height="218"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Nem tudo são flores…
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6orz56lf9zzvd89hsc90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6orz56lf9zzvd89hsc90.png" alt="Imagem: Consumo de memória do nodejs com caminhos relativos" width="615" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Node com caminhos relativos&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku7oghtaqnj0rxnly81h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku7oghtaqnj0rxnly81h.png" alt="Imagem: Consumo de memória do nodejs com módulos adicionais" width="614" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Node com módulos adicionais&lt;/p&gt;

&lt;p&gt;Depois de pesquisar muitas alternativas, descobri o pacote &lt;a href="https://www.npmjs.com/package/tsc-alias"&gt;&lt;em&gt;tsc-alias&lt;/em&gt;&lt;/a&gt; que simplifica toda essa questão de resolução de módulos no typescript vs runtime.&lt;/p&gt;

&lt;p&gt;Após adicioná-lo ao projeto, basta buildar o projeto normalmente com o &lt;em&gt;tsc&lt;/em&gt; e na sequencia executar o comando &lt;em&gt;tsc-alias&lt;/em&gt;. Você também pode adicionar o comando ao script de build no package.json.&lt;/p&gt;

&lt;p&gt;Olha como ficou a utilização de memória.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipsbi2kvgu4hjr4gb0vq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipsbi2kvgu4hjr4gb0vq.png" alt="Imagem: Consumo de memória do nodejs apos o tsc-alias" width="613" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que tenham gostado ❤&lt;/p&gt;

&lt;p&gt;Valeu pessoal!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/justkey007"&gt;
        justkey007
      &lt;/a&gt; / &lt;a href="https://github.com/justkey007/tsc-alias"&gt;
        tsc-alias
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Replace alias paths with relative paths after typescript compilation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;tsc-alias&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://badge.fury.io/js/tsc-alias" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/f944667a59dcebca56b3e969d72faa288c8e3ff9be9718ebc9f0c98455c4d823/68747470733a2f2f62616467652e667572792e696f2f6a732f7473632d616c6961732e737667" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="http://doge.mit-license.org" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/1ac8f5faa0cb04cf2dae93b915156fd7df4ee123b8c97155d8f57a8778ebfb37/68747470733a2f2f696d672e736869656c64732e696f2f3a6c6963656e73652d6d69742d626c75652e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.com/donate/?hosted_button_id=FPRE4VERGHZ3E" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/0283ea90498d8ea623c07906a5e07e9e6c2a5eaa6911d52033687c60cfa8d22f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f6e6174652d50617950616c2d677265656e2e737667" alt="Donate"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Comparison to &lt;a href="https://github.com/dividab/tsconfig-paths"&gt;tsconfig-paths&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;+ Compile time (no runtime dependencies)&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First, install tsc-alias as devDependency using npm.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install -g tsc-alias&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install --save-dev tsc-alias
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Add it to your build scripts in package.json&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-json notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;"scripts"&lt;/span&gt;: {
  &lt;span class="pl-ent"&gt;"build"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;tsc --project tsconfig.json &amp;amp;&amp;amp; tsc-alias -p tsconfig.json&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
}

&lt;span class="pl-ii"&gt;================ OR ===================&lt;/span&gt;

&lt;span class="pl-ent"&gt;"scripts"&lt;/span&gt;: {
  &lt;span class="pl-ent"&gt;"build"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;tsc &amp;amp;&amp;amp; tsc-alias&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
  &lt;span class="pl-ent"&gt;"build:watch"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;tsc &amp;amp;&amp;amp; (concurrently &lt;span class="pl-cce"&gt;\"&lt;/span&gt;tsc -w&lt;span class="pl-cce"&gt;\"&lt;/span&gt; &lt;span class="pl-cce"&gt;\"&lt;/span&gt;tsc-alias -w&lt;span class="pl-cce"&gt;\"&lt;/span&gt;)&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
}&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Issues&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If you have an issue, please create one. But, before:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;try to check the &lt;a href="https://github.com/justkey007/tsc-alias/discussions/110"&gt;FAQ.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;try to check if there exits alike issues.&lt;/li&gt;
&lt;li&gt;try to run with &lt;code&gt;--debug&lt;/code&gt; and check if config is correctly loaded and all sourcefiles…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/justkey007/tsc-alias"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>typescript</category>
      <category>node</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
