build - Behåll src/-mappstrukturen när du bygger till dist/-mappen med TypeScript 3
Jag har en TypeScript Node.js-server med denna struktur:
tsconfig.json
package.json
src/
middleware/
utils/
index.ts
dist/
middleware/
utils/
index.js
När jag använde TypeScript 2 kunde jag transpila mitt projekt från src/ till en dist/-mapp och ha en spegelbild av min mappstruktur att arbeta med.
Med lanseringen av TypeScript 3 har de introducerat projektreferenser och ändrat sättet som kod transpileras till en utmatningskatalog. Nu skriver tsc ut till dist/-mappen på ett inbäddat sätt som detta:
dist/
src/
middleware/
utils/
index.js
Min tsconfig.json är:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"allowJs": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"resolveJsonModule": true,
"declaration": false,
"outDir": "dist/",
"lib": [
"es7",
"dom"
]
},
"include": [
"src/"
]
}
Hur kan jag konfigurera TypeScript för att skriva ut min src/-mapp som en spegelbild i en dist/-mapp?
Svar #1
Jag hade ett liknande problem när jag initialt konverterade till ett TypeScript-projekt. Jag satte också resolveJsonModule: true och src-katalogen kopierades till utmatningskatalogen dist.
Den underliggande anledningen är att en av mina källfiler requirede package.json i projektets rot. När jag tog bort det, lade tsc inte längre till src i dist-mappen.
Kort sagt, se till att du inte kräver filer utanför din src-katalog.
Förklarande FAQ här: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-does---outdir-moves-output-after-adding-a-new-file
Svar #2
Strukturen på utmatningskatalogen styrs av rootDir i compilerOptions. Se dokumentationen här, att sätta den till ./src bör lösa problemet.
{
"compilerOptions": {
"rootDir": "src",
...
},
"include": [
"src/"
]
}
Svar #3
Uppgraderingen från TypeScript 2 till 3 borde i sig inte ha förändrat beteendet; om vi kan bekräfta att den gjorde det kan det vara ett fel. Kontrollera i vilket fall att kompilatoralternativet rootDir pekar på din src-katalog och inte på överordnad katalog, eftersom strukturen under rootDir är det som speglas under outDir.
Svar #4
Förutom att specificera compilerOptions.outDir, specificera compilerOptions.rootDir i tsconfig.json.
{
"compilerOptions": {
// ...
"outDir": "dist",
"rootDir": "./",
// ...
}
}
Kör sedan: $ tsc -b i den mapp där tsconfig.json-filen finns.
Observera: compilerOptions.rootDir bör användas när du vill inkludera en struktur av filer från en icke-nästad mapp i mappen för tsconfig.json-filen.
