Forum: PC-Programmierung GULP Frage: pipe und Abarbeitung


von Frank L. (Firma: Flk Consulting UG) (flk)


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

von Frank L. (Firma: Flk Consulting UG) (flk)


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

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.