GULP Frage: pipe und Abarbeitung

OP (Firma: Flk Consulting UG) #7198365
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.