2016-12-13 3 views
1

Я использую Aurelia Cli, и он работает отлично по большей части, но 1 вещь действительно меня обманывает.Случайный отказ переполнения глотки при использовании Aurelia CLI и машинописных файлов

Я создал новое расширение прототип так:

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; 
} 

Это работает отлично, за исключением того, когда я сохранить любой файл с au run --watch работает. Я получу ошибку при построении, сообщив мне, что remove недействительный метод на []. Это случайный случай и происходит примерно в 1 раз в 4 раза. Если я ничего не изменю и не сохраню снова, скорее всего, он больше не будет жаловаться.

Как я могу получить Aurelia, чтобы все было в порядке с этим?

Ссылка на полный проект: https://github.com/4imble/StackRpg/tree/master/Client/src

+1

Я думаю, что это звучит как проблема на шаге Transpile TypeScript, ничего особенного для Aurelia. –

+0

Вполне возможно, я не предлагаю что-то сломано в Aurelia или CLI, просто давая некоторый контекст моей проблеме. Есть ли способ помочь ему, что-то вроде заказа, так что он выглядит в первую очередь? – 4imble

+0

Предполагая, что это не связано - http://stackoverflow.com/questions/12701732/typescript-augmenting-built-in-types - Я не уверен на 100%, нужно быть более повторяемым, возможно, чтобы выяснить, что может вызывают это. Я буду пинговать кого-то с большим количеством знаний TS. –

ответ

2

Проблема вы видите, вероятно, компилятор не кормил исходный файл расширения массива последовательно. Скорее всего потому, что build script is set up to only compile files if they change.

Во-первых, попробуйте комментировать .pipe(changedInPlace({firstPass: true})); и посмотрите, начнете ли вы получать более последовательные сборки.

Если это так, вам, вероятно, придется обновить скрипт сборки таким образом, чтобы этот исходный файл всегда передавался компилятору. Что-то вроде:

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) 

Кроме того, в машинописи 2.1, по крайней мере, если я пытаюсь установить прототип массива, как вы есть, будет жаловаться. Это можно исправить с помощью:

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

Это, похоже, сработало. Я не могу сказать наверняка, однако, поскольку я не могу воспроизвести его, даже если я изменил файл обратно ?! Может быть, что-то делать со мной, обновляя машинопись (2.1.4), чтобы попытаться воспроизвести проблему, о которой вы говорили. – 4imble