Pesquisa de site

javascript - Compilando aliases de path do TypeScript para paths relativos para publicação no NPM?


Eu tenho um projeto em TypeScript que usa caminhos para importações. Por exemplo:

"paths": {
  "@example/*": ["./src/*"], 
}

Assim, o projeto pode importar arquivos diretamente usando uma instrução como:

import { foo } from "@example/boo/foo";

Para publicar no NPM, eu estou compilando os arquivos TypeScript e depois copiando o resultado para uma pasta dist. Assim, todos os arquivos *.d.ts e correspondentes *.js estão na pasta dist. Eu também copio o package.json para a pasta dist.

Agora eu testo isso gerando um novo projeto TypeScript e então executo npm i -S ../example/dist, a fim de instalar o projeto e tentar executar algum do código TypeScript compilado.

No entanto, os imports relativos não funcionam mais. Por exemplo, se boo.ts depender de foo.ts, ele informará que não é possível resolver foo.ts.

Quando olho para os arquivos *.d.ts, eles contêm os mesmos caminhos que foram usados no código-fonte antes de ser compilado. É possível transformá-los em caminhos relativos?

Atualizar

Parece que gerar caminhos relativos para Node é algo que o Typescript não realiza automaticamente. Se você gostaria desse recurso, assim como eu, por favor forneça feedback neste relatório de bug.

Resposta #1

Como um breve seguimento à sugestão de arhnee, parece que em agosto de 2020, a Microsoft ainda se recusa a implementar transformadores personalizados por algum motivo, então esses módulos continuam sendo relevantes.

Então, para leitores futuros, aqui está como você pode realmente compilar aliases de caminho do TS em caminhos relativos. ttypescript é apenas uma estrutura de transformador que requer um "path transformer" para realmente converter os aliases de caminho do TS. Portanto, você precisará instalar tanto ttypescript quanto typescript-transform-paths.

npm i --save ttypescript typescript-transform-paths

Então, é fácil, basta especificar o uso adicionando a seguinte propriedade ao objeto compilerOptions em tsconfig.json:

    "plugins": [
      { "transform": "typescript-transform-paths" }
    ]

E finalmente, execute ttsc em vez de tsc.

Resposta #2

Há um projeto chamado ttypescript que você pode usar para isso. Se você usá-lo com o módulo typescript-transform-paths, acredito que ele alcançará o que você quer.

Artigos relacionados