Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Disponibilização do projeto tanto para esmodule quando commonJS

Estou començando a disponibilizar meus pacotes no npm mas fique com dúvida sobre como configurar o tsconfig.json. Gostaria de disponibilizar o projeto tanto com comomonJS se o usuário quiser usar require, ou com esmodule se a pessoa quiser importar com import, acontece que eu não consegui configurar isso. Estou compilando o projeto typescript e disponibilizando em javascript via npm, e uma das opções do tsconfig.json é o "module" em que tem a opção de commonjs e outras opções no padrão ECMAScript, infelizmente só consegui disponibilizar ou como commonJS ou no padrão ECMAScript mas não consegui com ambos. Alguém pode me ajudar a tornar o projeto híbrido? Aceito qualquer material de estudo.

1 resposta
solução!

Olá, Bruno! Tudo joia?

Para conseguir isso, você pode seguir alguns passos para configurar seu projeto TypeScript e o tsconfig.json. A ideia é compilar seu código duas vezes, uma para cada módulo, e disponibilizar ambas as versões no seu pacote npm.

Aqui está um exemplo prático de como você pode fazer isso:

  1. Estrutura do Projeto:

    • Crie duas pastas de saída, uma para CommonJS e outra para ESModules.
    • Configure dois arquivos tsconfig.json, um para cada módulo.
  2. Configuração do tsconfig.json:

    • Crie um tsconfig.commonjs.json:

      {
        "compilerOptions": {
          "module": "commonjs",
          "outDir": "./dist/commonjs",
          "declaration": true,
          "declarationDir": "./dist/types"
        },
        "include": ["src/**/*"]
      }
      
    • Crie um tsconfig.esm.json:

      {
        "compilerOptions": {
          "module": "esnext",
          "outDir": "./dist/esm",
          "declaration": true,
          "declarationDir": "./dist/types"
        },
        "include": ["src/**/*"]
      }
      
  3. Scripts no package.json:

    • Adicione scripts para compilar ambas as versões:
      {
        "scripts": {
          "build:commonjs": "tsc --project tsconfig.commonjs.json",
          "build:esm": "tsc --project tsconfig.esm.json",
          "build": "npm run build:commonjs && npm run build:esm"
        }
      }
      
  4. Configuração do package.json:

    • Especifique os caminhos para os diferentes módulos:
      {
        "main": "./dist/commonjs/index.js",
        "module": "./dist/esm/index.js",
        "types": "./dist/types/index.d.ts",
        ...
      }
      
  5. Compilação:

    • Execute o comando npm run build para compilar o projeto nas duas versões.

Com essa configuração, você estará gerando duas versões do seu pacote, uma compatível com CommonJS e outra com ESModules, além de garantir que os tipos TypeScript sejam corretamente exportados.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.