typescript - tsconfig.json - Bygg kun ts-filer fra mappe


Jeg prøver for øyeblikket å bygge mine ts-filer til en enkelt ts-fil. Problemet jeg får er at koden min nedenfor ikke gjør det jeg trodde den ville gjøre. Jeg brukte sourceRoot for å prøve å sette det eneste stedet den kunne hente kilden fra, men det fungerte ikke. Jeg har også prøvd å sette en . foran katalogen, men den henter fortsatt fra alle steder :(

{
   "compilerOptions": {
       "target": "ES5",
       "noImplicitAny": true,
       "removeComments": true,
       "preserveConstEnums": true,
       "out": "www/js/app.js",
       "sourceMap": true,
       "sourceRoot": "www/app"
   }
}

alle filer inkludert de som ikke er inne i www/app build :(

For nå har jeg gått tilbake til å spesifisere filene manuelt:

{
    "compilerOptions": {
        "target": "ES5",
        "noImplicitAny": true,
        "removeComments": true,
        "preserveConstEnums": true,
        "out": "www/js/app.js",
        "sourceMap": true
    },
    "files": [
        "./www/app/app.ts",
        "./www/app/menu/menuController.ts",
        "./www/app/playlists/playlistsController.ts"
    ]
}

er det mulig å begrense kildemappene til bare www/app?

Takk

Svar #1

Dette spørsmålet er litt eldre, det vet jeg. Men noen av TypeScript-kompilatoralternativene som nevnes her, er ikke nødvendigvis nyttige for å løse spørsmålet. For folk som søker etter rootDir eller lignende (som meg), kan det være nyttig å klargjøre de nevnte og løsningsrelevante alternativene.

Skriv ut alle filer til én enkelt fil

✅ Bruk outFile

❌ Ikke bruk out (utdatert)

Bakgrunn:

Hvis du vil bygge til en destinasjonsmappe, velg outDir. Se kompilatoralternativer for mer informasjon.

Bare utgiv filer fra en bestemt katalog

✅ Bruk files/include/exclude i tsconfig

❌ Ikke bruk rootDir

Forklaring:

Kompilatoren finner alle inngangsfilene ved å

  • ser på file/include/exclude-egenskaper
  • følgende import-setninger
  • følgende ///<reference .. /> (bør ikke ha så mye å si lenger)

Hvis disse alternativene ikke er spesifisert, vil alle filer i rotmappen til TypeScript-prosjektet ditt (angitt av tsconfig.json) bli inkludert. Modulene som importeres blir automatisk inkludert av kompilatoren, uavhengig av file/include/exclude - se på FAQ-en deres. Alle inngangsfiler kombinert utgjør omfanget av filer den vil bygge. For hvordan konfigurere file/include/exclude, se tsconfig.json-dokumentasjonen, vurder også @TSVs svar.

rotmappe

rootDir styrer output-mappestrukturen sammen med outDir, det brukes ikke til å spesifisere kompilatorens input. Bruken er (sitat):

For hver inputfil (dvs. en .ts/.tsx-fil) må den generere en matchende utdatafil (en .js/.jsx-fil). For å finne filbanen til den genererte utdatafilen vil den fjerne «rootDir» fra inputen, og deretter legge til «outDir» foran den.

Følgelig trenger rootDir en katalog som inkluderer alle kildene dine fra ovenfor, ellers får du

feil TS6059: Fil er ikke under 'rootDir' .. 'rootDir' forventes å inneholde alle kildefiler

Hvis rootDir utelates, beregner kompilatoren automatisk en passende katalog ved å vurdere alle tilgjengelige inngangsfiler. Så det trenger ikke nødvendigvis å settes.

kilderot

Dette alternativet er bare relevant med sourcemaps/feilsøking og kan utelates for omfanget av spørsmålet. Det brukes når kildefilene dine er på et annet sted under kjøring enn under design. Kompilatoren vil justere stiene til kildene i sourcemap-filen for å matche stiene under kjøring (kompilatoralternativer).

Håper det klargjør ting litt.

Svar #2

Ja, det er mulig. Vennligst bruk rootDir som 'rootDir': 'app', hvis www er rotmappen til applikasjonen din.

Beskrivelse av rootDir fra TypeScript-kompileringsalternativer:

Angir rotkatalogen for inndatafiler.

Svar #3

I henhold til tsconfig-skjemaet:

"Hvis ingen 'files'-egenskap er til stede i en tsconfig.json, inkluderer kompilatoren som standard alle filer i den inneholdende katalogen og underkatalogene. Når en 'files'-egenskap er spesifisert, inkluderes kun de filene."

"Hvis ingen 'files'-egenskap er til stede i en tsconfig.json, men en 'exclude'-egenskap er til stede, vil kompilatoren ekskludere filene og mappene som er spesifisert i 'exclude'-egenskapen."

I følge beskrivelsen:

Egenskapen "files" kan ikke brukes sammen med egenskapen "exclude". Hvis begge er spesifisert, vil egenskapen "files" ha forrang.

Problemet 'støtte for globs i tsconfig.json-filer-egenskapen (eller bare fil-/mappesutdelinger)' gjenspeiler dagens situasjon.

Relaterte artikler