Protractor: Das NPM-Releasepaket sollte `globals.ts` durch `globals.d.ts` ersetzen

Erstellt am 18. Aug. 2016  ·  3Kommentare  ·  Quelle: angular/protractor

Fehlerbericht

  • Knotenversion: 6.3.1
  • Winkelmesser-Version: 4.0.3
  • Typoskript-Version: 2.0.0

    Überblick

Dies ist spezifisch für Typoskript-Projekte mit Quelldateien, die protractor/globals importieren. Insbesondere beim Importieren von protractor/globals , da die NPM-Version die globals.ts Datei anstelle einer entsprechenden Definitionsdatei ( globals.d.ts ) enthält, berechnet der Typoskript-Compiler das gemeinsame Quellverzeichnis des konsumierenden Typoskript-Projekts zum gemeinsamen Pfad zwischen der Protractor-Abhängigkeit global.ts (wahrscheinlich node_modules/protractor ) und wo auch immer die Quellen des konsumierenden Projekts enthalten sind (z. B. src/test/**/*.ts ). Dies führt dazu, dass der Compiler die Quelldateien mit allen übergeordneten Verzeichnissen ausgibt.

Beachten Sie, dass dies nur ein Problem damit ist, wo der Typescript-Compiler die kompilierten Dateien ausgibt; die Kompilierung läuft gut und der Winkelmesser wird (so großartig) wie erwartet verbraucht.

Schritte zum Reproduzieren

Um das Szenario, das ich schlecht beschreibe, besser zu demonstrieren, sehen Sie sich dieses Beispielprojekt an .

Vorgeschlagene Lösung

Ich vermute, die Lösung hier wäre eine Kombination aus zwei Dingen:

  1. Aktualisieren Sie den aktuellen gulp-Kompilierungsprozess, um sicherzustellen, dass eine Definitionsdatei erstellt wird, wenn die globals.ts Datei kompiliert wird; und
  2. Aktualisieren Sie den Protractor NPM-Release-Prozess (ob manuell oder automatisiert), um die globals.ts Datei aus dem NPM-Release-Paket zu entfernen, sodass nur die kompilierte Javascript-Datei und die entsprechende Definitionsdatei übrig bleiben.

Wenn dies in Ordnung ist, würde ich gerne einen Pull-Request senden, um den ersten Teil der Lösung zu bearbeiten. Wenn der Freigabeprozess für NPM immer noch dem Freigabedokument des Projekts folgt, würde ich dies auch gerne mit einem Schritt zum Entfernen der Datei globals.ts aktualisieren, obwohl dies möglicherweise besser von jemandem bearbeitet werden könnte, der tatsächlich Freigaben durchführt.

Ich habe dies gründlich durchdacht und glaube, dass sich der Typescript-Compiler wie erwartet verhält, aber lassen Sie es mich wissen, wenn Sie anderer Meinung sind, da ich immer noch mit Typescript nass werde.

(Bearbeiten: Format aktualisieren, um die Fehlervorlage widerzuspiegeln)

Hilfreichster Kommentar

@cnishina froh, dass das Beispiel geholfen hat! Vielen Dank für die schnelle Antwort, das sieht gut aus, abgesehen von einer Sache, die mich vielleicht verwirrt: Während Ihre Änderung die global.ts Datei aus dem NPM-Paket entfernt, wird keine entsprechende globals.d.ts Deklaration angezeigt den protractor/globals Import für den Typoskript-Compiler für konsumierende Projekte unsichtbar machen?

Ich denke, der erste Teil meines Vorschlags bestand darin, das kompilierte globals.js zugunsten der globals.d.ts Deklaration zu entfernen, sondern beides zu haben, damit das NPM-Paket Folgendes enthält:

  • globals.js
  • globals.d.ts

nur ohne die globals.ts Quelldatei.

Ich glaube, dass dies mit tsc mit dem --declaration Flag beim Kompilieren der global.ts Datei erreicht werden kann. Zum Beispiel sollte das Ändern der tsc:globals-Schluckaufgabe wie unten den tsc und tsc:w Aufgaben in der package.json gibt, die möglicherweise ebenfalls aktualisiert werden müssen vorausgesetzt, dies würde nicht-globale Zusammenstellungen nachteilig verändern:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Lassen Sie mich wissen, wenn ich etwas vermisse, und nochmals vielen Dank für die schnelle Lösung! Übrigens ist die Verwendung von Protractor mit Typescript ein echter Knaller!

Alle 3 Kommentare

@tmeneau Danke für dieses Problem: Das Github-Beispiel hat mir sehr gut gefallen... 👍 👍 👍

Dies ist also ein Nebeneffekt bei der Verwendung von outDir. Wenn beispielsweise outDir auf output , wird zusätzlich zu den transpilierten Dateien auch output/node_modules/protractor/globals.js transpiliert. Ich habe ursprünglich die Datei globals.ts eingefügt, da Sie (damals) nach einigen Experimenten keine Dateitypen importieren konnten, ohne die TypeScript-Datei zu haben.

Um die Vorschläge durchzugehen:

  1. Funktioniert nicht, da globals.ts nicht einfach eine Deklarationsdatei *d.ts sein kann, da wir Variablen aus dem globalen Namensraum zuweisen.
  2. Nach dem Experimentieren mit exampleTypescript scheint dies zu funktionieren. Ich aktualisiere die .npmignore, um diese Datei nicht zu veröffentlichen und aktualisiere Protractor auf TypeScript 2. Siehe: https://github.com/angular/protractor/pull/3485

@cnishina froh, dass das Beispiel geholfen hat! Vielen Dank für die schnelle Antwort, das sieht gut aus, abgesehen von einer Sache, die mich vielleicht verwirrt: Während Ihre Änderung die global.ts Datei aus dem NPM-Paket entfernt, wird keine entsprechende globals.d.ts Deklaration angezeigt den protractor/globals Import für den Typoskript-Compiler für konsumierende Projekte unsichtbar machen?

Ich denke, der erste Teil meines Vorschlags bestand darin, das kompilierte globals.js zugunsten der globals.d.ts Deklaration zu entfernen, sondern beides zu haben, damit das NPM-Paket Folgendes enthält:

  • globals.js
  • globals.d.ts

nur ohne die globals.ts Quelldatei.

Ich glaube, dass dies mit tsc mit dem --declaration Flag beim Kompilieren der global.ts Datei erreicht werden kann. Zum Beispiel sollte das Ändern der tsc:globals-Schluckaufgabe wie unten den tsc und tsc:w Aufgaben in der package.json gibt, die möglicherweise ebenfalls aktualisiert werden müssen vorausgesetzt, dies würde nicht-globale Zusammenstellungen nachteilig verändern:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Lassen Sie mich wissen, wenn ich etwas vermisse, und nochmals vielen Dank für die schnelle Lösung! Übrigens ist die Verwendung von Protractor mit Typescript ein echter Knaller!

Yup... 👍 globals.d.ts sollte immer noch da sein, damit der protractor/globals Import funktioniert. Ich habe die PR aktualisiert. Vielen Dank!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen