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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren