javascript - Kompilera TypeScript-sökvägsalias till relativa sökvägar för NPM-publicering?


Jag har ett TypeScript-projekt som använder sökvägar för import. Till exempel:

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

Så projektet kan importera filer direkt genom att använda ett uttalande som:

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

För publicering till NPM kompilerar jag TypeScript-filerna och kopierar sedan resultatet till en dist-mapp. Därmed finns alla *.d.ts och motsvarande *.js-filer i dist-mappen. Jag kopierar också package.json till dist-mappen.

Jag testar nu detta genom att generera ett nytt TypeScript-projekt och sedan köra npm i -S ../example/dist, för att installera projektet och försöka köra något av den kompilerade TypeScript-koden.

Dock fungerar de relativa importerna inte längre. Till exempel, om boo.ts är beroende av foo.ts kommer det säga att det inte kan lösa foo.ts.

När jag tittar på *.d.ts-filerna innehåller de samma sökvägar som användes i källkoden innan den kompilerades. Är det möjligt att göra om dessa till relativa sökvägar?

Uppdatera

Det ser ut som att generera relativa sökvägar för Node är något som Typescript inte gör automatiskt. Om du skulle vilja ha denna funktion, som jag skulle, vänligen ge feedback på denna rapport om buggen.

Svar #1

Som en kort uppföljning på arhnees förslag verkar det som att Microsoft fortfarande vägrar att implementera egna transformatorer av någon anledning från och med augusti 2020, så dessa moduler förblir relevanta.

Så till framtida läsare, här är hur du faktiskt kan kompilera TS-sökvägsalias till relativa sökvägar. ttypescript är endast ett transformatorramverk som kräver en "path transformer" för att faktiskt konvertera TS-sökvägsalias. Därför behöver du installera både ttypescript och typescript-transform-paths.

npm i --save ttypescript typescript-transform-paths

Sedan är det lika enkelt som att ange användning genom att lägga till följande egenskap i compilerOptions-objektet i tsconfig.json:

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

Och slutligen, kör ttsc istället för tsc.

Svar #2

Det finns ett projekt som heter ttypescript som du kan använda för detta. Om du använder det med modulen typescript-transform-paths tror jag att det kommer att uppnå det du vill.

Relaterade artiklar