2016-12-13 4 views
1

Ich benutze die Aurelia Cli und es funktioniert gut in den meisten Fällen, aber 1 Sache ist wirklich nervig mich.Random gulp transpile Fehler bei der Verwendung von Aurelia CLI und Typoskript

Ich habe eine neue Prototyp Erweiterung geschaffen wie so:

interface Array<T> { 
    remove(itemToRemove: T): Array<T>; 
} 

Array.prototype.remove = function (itemToRemove) { 
    const index = this.indexOf(itemToRemove); 
    if (index !== -1) { 
     this.splice(index, 1); 
    } 
    return this; 
} 

Dies funktioniert gut, außer dass, wenn ich eine Datei mit au run --watch Laufe speichern. Ich werde einen Fehler auf Build bekommen, der mir sagt, dass remove keine gültige Methode auf [] ist. Dies ist zufällig und passiert etwa 1 in 4 mal. Wenn ich nichts ändere und wieder speichere, wird es sich wahrscheinlich nicht mehr beschweren.

Wie kann ich Aurelia dazu bringen, konsequent damit einverstanden zu sein?

Link zum vollständigen Projekt: https://github.com/4imble/StackRpg/tree/master/Client/src

+1

behoben werden. Ich denke, das klingt wie ein Problem in der Art Script transpile Schritt, nichts spezifisch für Aurelia. –

+0

Ich schlage nicht vor, dass etwas in Aurelia oder der CLI gebrochen ist, nur um meinem Problem einen Kontext zu geben. Gibt es einen Weg, um es zu helfen, etwas wie eine Bestellung so, dass es zuerst angesehen wird? – 4imble

+0

Angenommen, dies ist nicht verwandt - http://stackoverflow.com/questions/12701732/typescript-augmenting-built-in-types - Ich bin nicht 100% sicher, müsste mehr wiederholbar sein, wahrscheinlich um herauszufinden, was kann Weil es. Ich werde jemanden mit mehr TS-Wissen ping –

Antwort

2

Das Problem Sie sehen, ist wahrscheinlich der Compiler nicht konsequent die Array-Erweiterung Quelle-Datei eingespeist wird. Höchstwahrscheinlich wegen der build script is set up to only compile files if they change.

Versuchen Sie zuerst, .pipe(changedInPlace({firstPass: true})); auskommentieren und sehen Sie, ob Sie mehr konsistente Builds erhalten.

Wenn dies der Fall ist, müssen Sie das Buildskript wahrscheinlich so aktualisieren, dass diese Quelldatei immer an den Compiler übergeben wird. Etwas wie:

let dts = gulp.src(project.transpiler.dtsSource); 

let src = gulp.src(project.transpiler.source) 
.pipe(changedInPlace({firstPass: true})); 

let exts = gulp.src("path/to/extension.ts") 

return eventStream.merge(dts, src, exts) 

Auch in Typoskript 2.1 zumindest, wenn ich versuche, ein Array-Prototyp zu setzen, wie Sie haben, wird sich beschweren. Das kann mit:

(<any>Array.prototype).remove = function (...etc 
+0

Das scheint zu funktionieren. Ich kann nicht sicher sagen, aber ich kann es nicht reproduzieren, auch wenn ich die Datei zurück ändere ?! Könnte etwas damit zu tun haben, dass ich Typoskript (2.1.4) hochrüste, um das von Ihnen erwähnte Problem zu reproduzieren. – 4imble

Verwandte Themen