Rollup-plugin-typescript2: Kompilierung sehr langsam mit TS v3.4

Erstellt am 9. Apr. 2019  ·  21Kommentare  ·  Quelle: ezolenko/rollup-plugin-typescript2

Was passiert und warum ist es falsch?

Sobald ich TS auf v3.4.2 aktualisiert habe, ist die Kompilierungszeit sehr langsam. Mit TS v3.3 wurde mein Projekt in ~ 20s gebaut und mit TS v3.4 dauert es ~ 5mn.

Ich habe es mit clean: true versucht, ich habe versucht, typescript: require('typescript') hinzuzufügen, ich habe versucht, rollup und alle zugehörigen Plugins zu aktualisieren. Jedes Mal, bei demselben Ergebnis, nimmt die Kompilierung viel Zeit in Anspruch .

Hinweis: Wenn ich tsc -p tsconfig.prod.json direkt ausführe, dauert die Ausgabe des dist weniger als 10 Sekunden.

Umgebung

Versionen

  • Typoskript: v3.4.2
  • Rollup: v1.6.0
  • rollup-plugin-typescript2: v0.19.2

rollup.config.js

  {
    input: 'src/index.ts',
    output: [
      { file: pkg.main, format: 'cjs' },
      { file: pkg.module, format: 'es' },
    ],
    plugins: [
      external({ includeDependencies: true }),
      resolve(),
      typescript({
        tsconfig: './tsconfig.prod.json',
        rollupCommonJSResolveHack: true,
      }),
      commonjs(),
      filesize(),
    ],
  }

tsconfig.json


tsconfig.json

{
  "compilerOptions": {
    "module": "esnext",
    "target": "es5",
    "jsx": "react",
    "esModuleInterop": true,
    "lib": ["dom", "es2017"],
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": false,
    "downlevelIteration": true
  },
  "include": ["src/**/*", "types/**/*"]
}


tsconfig.prod.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "noUnusedLocals": true,
    "sourceMap": true,
    "declaration": true
  },
  "exclude": ["src/doc", "**/stories.tsx", "**/test.tsx", "**/fixture.ts"]
}

package.json

    "rollup": "^1.6.0",
    "rollup-plugin-commonjs": "^9.2.1",
    "rollup-plugin-filesize": "^6.0.1",
    "rollup-plugin-node-resolve": "^4.0.1",
    "rollup-plugin-peer-deps-external": "^2.2.0",
    "rollup-plugin-typescript2": "^0.19.2",
    "typescript": "^3.4.2"

Plugin-Ausgabe mit Ausführlichkeit 3


Ausgabe

rpt2: typescript version: 3.4.2
rpt2: tslib version: 1.9.3
rpt2: rollup-plugin-typescript2 version: 0.19.2
rpt2: plugin options:
{
    "tsconfig": "./tsconfig.prod.json",
    "rollupCommonJSResolveHack": true,
    "clean": true,
    "verbosity": 3,
    "typescript": "version 3.4.2",
    "check": true,
    "cacheRoot": "/Users/yannpringault/git/PayFit/components/.rpt2_cache",
    "include": [
        "*.ts+(|x)",
        "**/*.ts+(|x)"
    ],
    "exclude": [
        "*.d.ts",
        "**/*.d.ts"
    ],
    "abortOnError": true,
    "useTsconfigDeclarationDir": false,
    "tsconfigOverride": {},
    "transformers": [],
    "tsconfigDefaults": {},
    "objectHashIgnoreUnknownHack": false
}
rpt2: rollup config:
{
    "chunkGroupingSize": 5000,
    "experimentalCacheExpiry": 10,
    "inlineDynamicImports": false,
    "input": "src/index.ts",
    "perf": false,
    "plugins": [
        {
            "name": "peer-deps-external"
        },
        {
            "name": "node-resolve"
        },
        {
            "name": "rpt2"
        },
        {
            "name": "commonjs"
        },
        {
            "name": "filesize"
        }
    ]
}
rpt2: built-in options overrides: {
    "noEmitHelpers": false,
    "importHelpers": true,
    "noResolve": false,
    "noEmit": false,
    "inlineSourceMap": false,
    "outDir": "/Users/yannpringault/git/PayFit/components/.rpt2_cache/placeholder",
    "moduleResolution": 2,
    "allowNonTsExtensions": true,
    "declarationDir": "/Users/yannpringault/git/PayFit/components"
}
rpt2: parsed tsconfig: {
    "options": {
        "module": 6,
        "target": 1,
        "jsx": 2,
        "esModuleInterop": true,
        "lib": [
            "lib.dom.d.ts",
            "lib.es2017.d.ts"
        ],
        "moduleResolution": 2,
        "rootDir": "/Users/yannpringault/git/PayFit/components/src",
        "forceConsistentCasingInFileNames": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noImplicitAny": true,
        "strictNullChecks": true,
        "suppressImplicitAnyIndexErrors": true,
        "noUnusedLocals": true,
        "downlevelIteration": true,
        "outDir": "/Users/yannpringault/git/PayFit/components/.rpt2_cache/placeholder",
        "sourceMap": true,
        "declaration": true,
        "configFilePath": "/Users/yannpringault/git/PayFit/components/./tsconfig.prod.json",
        "noEmitHelpers": false,
        "importHelpers": true,
        "noResolve": false,
        "noEmit": false,
        "inlineSourceMap": false,
        "allowNonTsExtensions": true,
        "declarationDir": "/Users/yannpringault/git/PayFit/components"
    },
    "fileNames": [
        "/Users/yannpringault/git/PayFit/components/src/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/Alert/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Alert/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Avatar/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Avatar/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/AvatarGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/AvatarGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Badge/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Badge/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Button/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Button/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Checkbox/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Checkbox/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/CheckboxGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/CheckboxGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/DatePicker/Popin/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/MenuContext.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/DropdownItem/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Dropdown/DropdownItem/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Field/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Field/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Icon/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Icon/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Input/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Input/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Layout/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Legend/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Legend/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Loader/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Loader/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressBar/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressBar/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressCircle/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/ProgressCircle/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/RadioGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/RadioGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Select/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Select/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Steps/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Steps/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Body.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Cell.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Footer.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Header.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/HeaderCell.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/HeaderRow.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Limit.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Table/components/Row.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/TableGroup/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/TableGroup/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tag/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tag/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Text/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Toggle/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Toggle/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tooltip/index.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/Tooltip/style.tsx",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/colors.test.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/colors.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/react.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/string.test.ts",
        "/Users/yannpringault/git/PayFit/components/src/components/_helpers/string.ts",
        "/Users/yannpringault/git/PayFit/components/src/primitives/_helpers.tsx",
        "/Users/yannpringault/git/PayFit/components/src/primitives/box.tsx",
        "/Users/yannpringault/git/PayFit/components/src/primitives/text.tsx",
        "/Users/yannpringault/git/PayFit/components/src/utils/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/colors/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/shadows/index.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/shadows/test.ts",
        "/Users/yannpringault/git/PayFit/components/src/utils/zIndex/index.ts",
        "/Users/yannpringault/git/PayFit/components/types/index.d.ts",
        "/Users/yannpringault/git/PayFit/components/types/modules.d.ts"
    ],
    "typeAcquisition": {
        "enable": false,
        "include": [],
        "exclude": []
    },
    "raw": {
        "extends": "./tsconfig.json",
        "compilerOptions": {
            "outDir": "./dist",
            "noUnusedLocals": true,
            "sourceMap": true,
            "declaration": true
        },
        "exclude": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "compileOnSave": false,
        "include": [
            "src/**/*",
            "types/**/*"
        ]
    },
    "errors": [],
    "wildcardDirectories": {
        "/users/yannpringault/git/payfit/components/src": 1,
        "/users/yannpringault/git/payfit/components/types": 1
    },
    "compileOnSave": false,
    "configFileSpecs": {
        "includeSpecs": [
            "src/**/*",
            "types/**/*"
        ],
        "excludeSpecs": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "validatedIncludeSpecs": [
            "src/**/*",
            "types/**/*"
        ],
        "validatedExcludeSpecs": [
            "src/doc",
            "**/stories.tsx",
            "**/test.tsx",
            "**/fixture.ts"
        ],
        "wildcardDirectories": {
            "/users/yannpringault/git/payfit/components/src": 1,
            "/users/yannpringault/git/payfit/components/types": 1
        }
    }
}
rpt2: included:
'[
    "*.ts+(|x)",
    "**/*.ts+(|x)"
]'
rpt2: excluded:
'[
    "*.d.ts",
    "**/*.d.ts"
]'

blocked help wanted

Hilfreichster Kommentar

@ezolenko Entschuldigung für die späte Antwort!

Ich habe clean: true und rtp2 auf 0.20.1 aktualisiert. Hier sind die Ergebnisse:

TS 3.3.3333

build -> 18s
tsc   -> 14.39s

TS 3.3.4000

build -> 17.3s
tsc   -> 14.39s

TS 3.4.1

build -> 5m 25.1s
tsc   -> 21.26s

TS 3.4.3

build -> 5m 52.7s
tsc   -> 21.57s

Zusätzlich gibt es dieses Problem im TS-Repo, das verwandt zu sein scheint, aber ich habe @types/styled-components an v4.1.4 angeheftet, sodass es meinen Fall nicht abdeckt.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.


Zum Spaß habe ich auch den neuesten 3.5 Build ausprobiert:

TS 3.5.0-dev.20190413

build -> 1m 23.5s
tsc   -> 18.84s

Alle 21 Kommentare

Ich habe das gleiche Problem. Ging von 24s zu 345s als TS von 3.3.4000 auf 3.4.3

Ich habe versucht, zu reproduzieren, und zuerst sah ich eine Verlangsamung, aber wenn ich clean: true und mehrmals zwischen Typoskript-Versionen hin und her gehe, sehe ich jetzt keinen Unterschied beim sauberen Build ...

Könnten Sie clean: true , rtp2 auf den neuesten Stand (0.20.1 oder Master) aktualisieren und einen Build mehrmals hintereinander auf ts 3.3 und ts 3.4 zeitlich festlegen?

@ezolenko Entschuldigung für die späte Antwort!

Ich habe clean: true und rtp2 auf 0.20.1 aktualisiert. Hier sind die Ergebnisse:

TS 3.3.3333

build -> 18s
tsc   -> 14.39s

TS 3.3.4000

build -> 17.3s
tsc   -> 14.39s

TS 3.4.1

build -> 5m 25.1s
tsc   -> 21.26s

TS 3.4.3

build -> 5m 52.7s
tsc   -> 21.57s

Zusätzlich gibt es dieses Problem im TS-Repo, das verwandt zu sein scheint, aber ich habe @types/styled-components an v4.1.4 angeheftet, sodass es meinen Fall nicht abdeckt.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.


Zum Spaß habe ich auch den neuesten 3.5 Build ausprobiert:

TS 3.5.0-dev.20190413

build -> 1m 23.5s
tsc   -> 18.84s

Das Problem, das Sie gefunden haben (https://github.com/Microsoft/TypeScript/issues/30663) und die Tatsache, dass 3.5-dev für Sie fünfmal schneller wurde, lässt mich glauben, dass sie etwas mit der API LanguageServer . Dies ist die API, die rpt2 als Teil der Kompilierung verwendet und die von Typecheckern in IDEs verwendet wird (aus diesem Grund tritt bei WebStorm eine Zeitüberschreitung auf usw.).

Ihr Projekt verwendet möglicherweise betroffene Typstrukturen an anderer Stelle. Deshalb hilft es nicht, styled-components fixieren. Und deshalb sehe ich keine große Verlangsamung, wenn ich zum Beispiel rpt2 selbst baue.

Ich denke, wir werden auf die endgültige Version 3.5 warten.

Übrigens, versuchen Sie es mit der Option check: false

Hat jemand bestätigt, ob dies mit 3.5 Release behoben ist?

@ tomasro27 Nicht für mich, noch mit 6 ( 3.6.0-dev.20190621 ). Scheint <3,3 ist immer noch der schnellste.

Es sieht so aus, als ob 3.5 etwas schneller ist, aber es könnte noch besser sein

Gibt es ein Update dazu? Scheint, als wäre es immer noch von TS blockiert?

Ja, ich glaube nicht, dass von diesem Ende aus etwas getan werden kann. Jeder kann es versuchen :)

+1
3.5.3 ist auch für uns sehr langsam

check: false funktioniert großartig.

Das Problem ist jedoch, dass es keinen Kompilierungsfehler gibt (wenn Sie vscode verwenden, werden die Fehler angezeigt 😄).

Zumindest kann ich check: false wenn ich an CSS arbeite (in JS). 👍

@ezolenko Weißt du, welcher genaue Typoskript-API-Aufruf den Build verlangsamt? :) :)

@ ZainlessBrombie nein, alles was ich weiß ist in diesem Thread. Das verknüpfte Typoskript-Problem ist wahrscheinlich verwandt, aber keine direkte Ursache (weil sie sagen, dass es in 3.5+ behoben werden sollte und anscheinend nicht).

Wenn Sie langsame Builds in Ihrem Projekt haben, überprüfen Sie, ob ts 3.3 tatsächlich schneller ist, wenn möglich. Möglicherweise liegt das Problem nicht am Typoskript, sondern an etwas anderem.

Gut, danke. Wenn ich dazu komme, könnte dies eine Wand sein, gegen die ich sozusagen meinen Kopf schlagen möchte :)

Bearbeiten: Dieses Problem tritt nur bei Dateien auf, die scheinbar gestaltete Komponenten importieren
Auch die Typescript-Dokumentation ist schrecklich

Das Profiling-Typoskript zeigt, dass die Ursache des Problems diese extrem großen Gewerkschaften sind, die gestylte Komponenten haben. Der einzige Ort, an dem dies behoben werden kann, ist Typoskript, es sei denn, es gibt eine Möglichkeit, Typoskript zur Auflösung des Cache-Moduls zu bringen (was auch immer der Fall sein sollte).

Ich verwende den Cache für die Modulauflösung im Aufruf von nodeModuleNameResolver hier nicht: https://github.com/ezolenko/rollup-plugin-typescript2/blob/b7c7389dcdf168715669520128ca656d6e940111/src/index.ts#L148

Ich bin mir nicht sicher, ob dies dazu führt, dass ts standardmäßig eins verwendet oder überhaupt nicht.

Ja, ich habe das TODO gesehen :)
Leider zeigt das Debuggen des Modulauflösungscaches bei Verwendung, dass Rebass-Komponenten zwischengespeichert, aber aus irgendeinem Grund nicht gestylt werden. Es übergibt einen internen Cache für diese ...

Ich bin gerade dabei, meine C # -Codebasis meiner Bibliothek nach TypeScript zu migrieren, und verwende Rollup zum Bündeln. (Ich hatte zuvor eine benutzerdefinierte C #> Haxe> JavaScript-Toolchain). Leider leide ich auch sehr unter der Kompilierungsgeschwindigkeit meiner neuen TypeScript-Codebasis, was die Entwicklung ziemlich schwierig macht.

Wenn möglich, stelle ich gerne einige Profilberichte zur Verfügung, wenn es möglich ist, diese zu generieren.

Hier einige Einblicke in mein Projekt:

Normalerweise verwende ich ttypescript, um eine AST-Transformation durchzuführen.
Codezeilen : ~ 50000

rollup -c rollup.config.ts : ~ 9-10sec
rollup -c rollup.config.ts -w (Erstkompilierung) : ~ 9-10sec
rollup -c rollup.config.ts -w (Hinzufügen von 1 Warnung in 1 TS-Datei) : ~
rollup -c rollup.config.ts -w (Alarm erneut entfernen) : ~ 20sec

tsc --version : 3.8.3
tsc --project tsconfig.json : ~ 6-7sec
tsc --project tsconfig.json -w (Erstkompilierung) : ~ 6-7sec
tsc --project tsconfig.json -w (Hinzufügen von 1 Warnung in 1 TS-Datei) : ~ 0,1-0,2 Sekunden
tsc --project tsconfig.json -w (Alarm erneut entfernen) : ~ 0.1-0.2sec

ttsc --version : 3.8.3
ttsc --project tsconfig.json : ~ 7-8sec
ttsc --project tsconfig.json -w (Erstkompilierung) : ~ 6-7sec
ttsc --project tsconfig.json -w (Hinzufügen von 1 Warnung in 1 TS-Datei) : ~ 0,1-0,2 Sekunden
ttsc --project tsconfig.json -w (Warnung erneut entfernen) : ~ 0.1-0.2sec

Inkrementelle Builds sind in der tsconfig aktiv.

Es scheint mir ziemlich ungewöhnlich, dass ein Inkremental- / Watch-Build doppelt so viel kostet wie ein vollständiger Build.

In meiner Umgebung scheinen die Dinge verrückt zu werden, wenn es ums Testen geht. Ich habe Rollup mit Karma und diesem Typoskript-Plugin verbunden. Wie Sie vielleicht wissen: Jede Testsuite erhält ein eigenes Bundle, was bedeutet, dass sich die oben genannten Zahlen häufen. Der Speicher wächst mit der Zeit auf> 2 GB. Selbst nach Minuten startet der Testlauf nicht wirklich. Dies geschieht bei jedem einzelnen npm run test .

Sobald es den Bereich "Bundle generieren für ..." in der Testgeneration erreicht, sehe ich lächerlich hohe Zahlen:
File01.test.ts mit 1 einfachen Test einer Parser-Klasse dauert 15 Sekunden
File02.test.ts mit 11 XML-Parsing-Tests benötigt 2,5 Minuten
File03.test.ts wurde nach 5 Minuten noch nicht abgeschlossen.

Ich habe keine Ahnung, wo dieses Problem verursacht werden könnte und ob es wirklich auf das Typoskript-Modul des Rollups zurückzuführen ist, aber dies schien das wahrscheinlichste Problem zu sein, mit dem ich verwandt bin.

Da mein Repo ziemlich groß und kompliziert ist, habe ich keine weiteren Details zu Konfigurationen mitgeteilt. Wenn mir jemand helfen kann, sie zu sammeln, stelle ich gerne Protokolle / Profilerstellungsergebnisse usw. zur Verfügung. Ich werde versuchen, ein neues einfaches unabhängiges Repository einzurichten, das meine gesamte Projektsituation widerspiegelt, aber ich kann nicht versprechen, dass das Problem weiterhin besteht.

@ Danielku15 Dein Hauptproblem ist, dass du von C # und nicht von C ++

Dieses Plugin verwendet nicht explizit die eigenen inkrementellen Builds von Typoskript (dies war beim Start nicht vorhanden).

Sie könnten @rollup/plugin-typescript ausprobieren (https://github.com/rollup/plugins/tree/master/packages/typescript), sie verwenden einen anderen Ansatz, denke ich, und geben Ihnen möglicherweise andere Zahlen.

Eine andere Möglichkeit besteht darin, eine Typoskript-Kompilierung aus der Rollup-Kette heraus durchzuführen (als vorgefertigter Schritt in npm oder so) und stattdessen die resultierenden js dem Rollup zuzuführen. Watch Build wäre interessant, obwohl ich denke, dass Sie tsc und Rollup im Watch-Modus starten können und wenn das Projekt richtig konfiguriert ist, wird es einfach funktionieren.

Ihr Hauptproblem ist, dass Sie von C # und nicht von C ++ migrieren

Off-Topic: Ich bin nicht sicher, ob ich ein C ++ - Framework / eine C ++ - Bibliothek nach TypeScript migrieren möchte. Abhängig von der Verwendung von Makros und Vorlagen (die C ++ - Entwickler lieben) kann es während der Migration zu Problemen kommen. 😅 Glücklicherweise wurde meine C # -Codebasis immer auf einen Stil zugeschnitten, der eine Kreuzkompilierung in andere Sprachen ermöglicht, sodass das Ergebnis aus einer Codestruktur durchaus akzeptabel ist . Ich muss nur ein bisschen besser herausfinden, wie man die Module organisiert, um den Overhead zu reduzieren. 😊

Dieses Plugin verwendet nicht explizit die eigenen inkrementellen Builds von Typoskript (dies war beim Start nicht vorhanden).

Das ist interessant, hat dieses Plugin eine eigene benutzerdefinierte "inkrementelle" Build-Strategie? Dies könnte erklären, warum ein vollständig sauberer Build bei Verwendung von watch möglicherweise länger dauert als eine Quellenänderung. Die Typoskript-Kompilierung ist mehr oder weniger stabil. Es ist bedauerlich, dass dieses Plugin die inkrementellen Aktualisierungen noch nicht verwenden kann, aber ich denke, dass die Zeit, die im Typenskript-Compiler verbracht wird, stabil ist. Die Zeit, die für das Rollup aufgewendet wird, scheint jedoch unterschiedlich zu sein. Nur das erklärt mir, dass ein sauberer Build schneller ist als eine Codeänderung im Überwachungsmodus.

Sie könnten versuchen, @ rollup / plugin-typescript ...

Vielen Dank für den Hinweis, ich werde versuchen, um zu sehen, ob es sich verbessert.

Eine andere Möglichkeit besteht darin, eine Typoskript-Kompilierung aus der Rollup-Kette heraus durchzuführen

Ich hatte ein solches Setup am Anfang, ließ es aber auf halbem Weg fallen, um während der Entwicklung "Watch" -Builds zu haben. Ich werde es noch einmal versuchen, wenn ich eine Pipeline mit den beiden Werkzeugen unabhängig voneinander "beobachten" kann. 👍

Update 1: Ich konnte jetzt meine gesamte Kompilierungs- und Testumgebung einrichten, indem ich tsc aufrief, das mit Rollup verkettet war. Ich musste mein eigenes Rollup-Plugin erstellen, um die tsconfig-Pfade korrekt aufzulösen, aber danach funktionierte es einwandfrei.

Saubere Kompilierung: 9 Sekunden, Watch-Kompilierung: 0,5 bis 1 Sekunde und Tests über Karma + Rollup werden ebenfalls ausgeführt (die Kompilierung dauert dort etwas länger, da für jede Testsuite ein Bundle generiert wird).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen