node.js - Hur hanterar jag d.ts-filer när jag publicerar min TypeScript-kod på npm
Jag har följt den här artikeln:
Hur man skapar starkt typade npm-paket
och har försökt att sätta upp mitt Typescript-projekt för att publicera det på npm.
Allt verkar göra logik, men det som inte täcks är hur man hanterar d.ts-filer.
Mitt projekt ser ungefär ut så här:
src
node
server.ts
browser
client.ts
common
contracts.d.ts
så när jag kompilerar detta med "declaration": true och "outDir: "dist" får jag:
dist
node
server.js
server.d.ts
browser
client.js
client.d.ts
både min server.ts-fil och client.ts-filer har
import {SomeType} from "../common/contracts";
så när någon annan använder detta paket kommer TypeScript-kompileringen att misslyckas eftersom server.d.ts och client.d.ts båda fortfarande har denna import.
Node kommer att fungera bra ändå eftersom client.js och server.js INTE har denna import. tsc måste ta bort importer av d.ts-filer.
Det jag vill ska hända är att filen contracts.d.ts kopieras till dist-mappen som en del av bygget. Hur gör jag det som en del av tsc-bygget?
Aktuell tillfällig lösning
Det jag för närvarande gör för att kringgå detta är att byta namn på min contracts.d.ts till bara contracts.ts vilket innebär att alla nödvändiga filer finns i dist-mappen men det innebär också att både klienten och servern måste ladda en tom contracts.js-fil som bara innehåller
"use strict";
//# sourceMappingURL=contracts.js.map
Svar #1
Jag tror att jag har kommit på en ganska bra lösning på detta. Jag har flyttat mina deklarationsfiler till en contracts-mapp så att mitt projekt ser ut så här:
src
node
server.ts
browser
client.ts
dist
node
server.js
server.d.ts
browser
client.js
client.d.ts
contracts
common.d.ts
Jag inkluderar sedan bara kontraktsmappen i npm-paketet och importerar filer med ../../contracts/common. Den här sökvägen fungerar både från src-mappen när man kompilerar och från dist-mappen när man bygger mot detta paket.
Svar #2
Om kontrakten dock bara är typer, skulle jag fortfarande deklarera dem i en .ts-fil. Eller genereras kontrakten någon annanstans ifrån?
