GULP Frage: pipe und Abarbeitung

OP (Firma: Flk Consulting UG) #7198365
Hallo Zusammen,
heute mal zwei Frage an die GULP Spezialisten.

Ausgangssituation:
1
gulp.task("bundle", gulp.series("removeWebpackModules", "lint", "webpack_form_prod", "transpileAllPublicTypescript", "transpileAllPrivateTypescript", "wait", "copy"/*, "uglifyF", "uglifyR"*/, "zip"));

In diesem Aufruf werden nacheinander verschiedene Schritte erledigt um 
meine Anwendung zu bundeln und für das Deployment vorzubereiten.

Die beiden Funktionen "transpileAllPublicTypescript" und 
"transpileAllPrivateTypescript" sind gerade meine beiden Sorgenkinder.

Da beide Funktionen identisch sind und nur mit unterschiedlichen 
Informationen versorgt werden zeige ich hier nur eine.
1
async function transpileAllPrivateTypescript(done) {
2
  for (const typeScriptModule of [...typeScriptPublicModules]) {
3
    var tsProject = ts.createProject('tsconfig.json');
4
    await gulp.src([TYPESCRIPTPATH + typeScriptModule.sourceFile])
5
      .pipe(tsProject())
6
      .pipe(replace("export {};", ""))
7
      .pipe(gulp.dest(typeScriptModule.targetPath));
8
  }
9
  done();
10
}

Die beiden Funktionen machen was sie sollen. Das Problem ist allerdings, 
des es mir nicht gelingt sie so zu formulieren, dass die gesamte 
Ausführung  wartet bis beide zu Ende gelaufen sind.

Das führt aktuell dazu, dass ich eine Funktion "wait" benutzte um 
sicherzustellen das die Ergebnisse der beiden auch da sind bevor ich die 
Funktion "copy" ausführe.

Die zweite Frage, die ich hätte, in der tsconfig.json habe ich für das 
aktuelle Projekt auch den Schalter "declaration=true" gesetzt.

Da die generierten d.ts Files leider auch im Zielordner landen würde ich 
gerne im letzten pipe - Aufruf eine Weiche einbauen mit der ich js Datei 
im eigentlichen Zielordner und d.ts Datei in einem anderen Ordner meines 
Projektes ablegen kann.

Leider übersteigen beide Problemstellungen meinen aktuellen Wissensstand 
bei GULP. Deshalb meine Bitte um eine kleine Hilfestellung.

Gruß und Danke

Frank
OP (Firma: Flk Consulting UG) #7198509
Hallo Zusammen,
ich konnte die Fragestellung selber beantworten. Ich bin mehr durch 
Zufall mit den richtgien Suchworten unterwegs gewesen :-(
1
const ts = require("gulp-typescript");
2
const merge = require('merge2');
3

4
async function transpileTypescript() {
5
  var tsResult = gulp.src(typeScriptModules)
6
    .pipe(ts({
7
      declaration: true,
8
      jsx: "react",
9
      allowJs: true,
10
      module: "ESNext",
11
      lib: [
12
        "dom",
13
        "ES2021"
14
      ],
15
      target: "ES2022",
16
      noImplicitAny: false,
17
      removeComments: true,
18
      sourceMap: false,
19
      noImplicitThis: false,
20
      skipLibCheck: true,
21
      forceConsistentCasingInFileNames: true,
22
      importHelpers: true,
23
      strict: true,
24
      moduleResolution: "Node",
25
      allowSyntheticDefaultImports: true,
26
    }));
27

28
  return merge([
29
    tsResult.dts.pipe(replace("export {};", "")).pipe(gulp.dest(dtsTargetDirectory)),
30
    tsResult.js.pipe(replace("export {};", "")).pipe(gulp.dest(jsTargetDirectory))
31
  ]);
32
}

So werden beide Probleme auf einmal gelöst.
Das ich am Ende ein
1
replace("export {};", "")
durchführe, hängt damit zusammen, das durch moduleResolution: "Node" am 
Ende der Datei genau diese Zeichenfolge eingefügt wird. Da wir die 
erzeugten Module in ClearScript verarbeiten, muss das weg.

Gruß
Frank

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.