microsoft / microsoft/TypeScript

[Bug] Projects have different output directory structure with same configuration.

Offen
#40,400 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TypeScript Version: 4.0 (npm)

Search Terms:
declarationDir, rootDir, baseURL.

Problem
My app has a circular reference between the client and the server for typing reasons, essentially during prototyping there is a proxy that allows the server and the client to call functions on the remote as though they were local asynchronous functions. This has traditionally worked fine (well, with effort) but lately my server tsconfig seems to want to output files in a different directory structure than it was previously, without warning (I didn't change the tsconfig file). Here's what's happening:

Expected behavior:
The folder structure should look like this:

Project:
    Client/
        tsconfig.json <--"Client tsconfig"
        code.ts
        code.js
    ClientDeclarations/
        code.d.ts
    Common/
        code.ts
        code.d.ts
        code.js
    Server/
        tsconfig.json <-- "Server tsconfig"
        code.ts
        code.js
    ServerDeclarations/
        code.d.ts <-- ! Note server files are meant to be at the root of the output dir
    tsconfig.json <-- "Parent tsconfig"

Actual behavior:
Instead it looks like this:

Project:
    Client/
        tsconfig.json <--"Client tsconfig"
        code.ts
        code.js
    ClientDeclarations/
        code.d.ts
    Common/
        code.ts
        code.d.ts
        code.js
    Server/
        tsconfig.json <-- "Server tsconfig"
        code.ts
        code.js
    ServerDeclarations/
        Client/
             code.d.ts <-- ! This is the client's .d.ts files which shouldn't be output by the server tsproj!
        Server/
             code.d.ts
    tsconfig.json <-- "Parent tsconfig"

Code
This is the "Parent tsconfig" (note I am using ttypescript):

{
  "compileOnSave": false,
  "compilerOptions": {
    "target": "es6",
    "sourceMap": true,
    "strict": true,
    "plugins": [
      { "transform": "../Typescript/SuperTransform.js" },
      { "transform": "../Typescript/Macros.js" }
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

This is the client config (I don't think the references section is used on the client, it's just there to keep the client and server configs similar):

{
  "compileOnSave": false,
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "module": "amd",
    "target": "es6",
    "lib": [ "es6", "dom" ],
    "sourceMap": true,
    "strict": true,
    "build": true,
    "declaration": true,
    "declarationDir": "../ClientDeclarations",
    "baseUrl": "./",
    "paths": {
      "@Common/*": [ "../Common/*" ],
      "@Server/*": [ "../ServerDeclarations/*" ],
      "@Client/*": [ "./*" ]
    }
  },
  "include": [
    "./*",
    "./External/koco.ts",
    "./External/kocss.ts",
    "./External/kopath.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "references": [
    { "path": "../Common" }
  ]
}

This is the server config (on the server I'm using module-alias):

{
  "compileOnSave": false,
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "lib": [ "es6", "dom" ],
    "sourceMap": true,
    "strict": true,
    "build": true,
    "declaration": true,
    "declarationDir": "../ServerDeclarations",
    "baseUrl": "./",
    "paths": {
      "@Common/*": [ "../Common/*" ],
      "@Client/*": [ "../ClientDeclarations/*" ],
      "@Server/*": [ "./*" ]
    }
  },
  "include": [
    "./*"
  ],
  "exclude": [
    "node_modules",
  ],
  "references": [
    { "path": "../Common" }
  ]
}

Note that the only difference between the client and the server is that they have a different module output type and the client includes a few more files.

I've tried adding "../Client" and "../Client/**" to the list of excludes on the server tsconfig but that didn't do anything. I also tried adding rootDir to be the same as baseUrl but that also didn't do anything. Interestingly removing baseUrl and adding rootDir had the desired effect (although is not usable because I need to use paths).

Playground link
This issue cannot be reproduced on the playground.

Related Issues:
I could not find any related issues.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit den im Issue enthaltenen Beispielen für parent-, client- und server-tsconfig.json und konzentriere dich auf declarationDir, baseUrl, rootDir, paths und project references. Reproduziere die Ausgabeverzeichnisstruktur von TypeScript 4.0 und vergleiche sie mit der erwarteten Struktur. Als erledigt gilt, zu erklären oder zu korrigieren, warum der Server Client-Deklarationen ausgibt und Dateien verschachtelt, einschließlich der Abdeckung der gemeldeten Konfiguration.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.