【问题标题】:Random gulp transpile failure when using Aurelia CLI and typescript使用 Aurelia CLI 和 typescript 时随机 gulp transpile 失败
【发布时间】:2016-12-15 04:22:14
【问题描述】:

我正在使用 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 不是[] 上的有效方法。这是随机的,大约 4 次发生。如果我什么都不改变并再次保存,它可能不会再抱怨了。

我怎样才能让 Aurelia 始终接受这个?

完整项目链接:https://github.com/4imble/StackRpg/tree/master/Client/src

【问题讨论】:

  • 我认为这听起来像是 TypeScript 转译步骤中的问题,与 Aurelia 无关。
  • 很可能我并不是在暗示 Aurelia 或 CLI 中出现了问题,只是为我的问题提供了一些背景信息。有没有办法帮助它,比如设置一个顺序以便首先查看它?
  • 假设这不相关 - stackoverflow.com/questions/12701732/… - 我不是 100% 肯定,可能需要更多可重复性来找出可能导致它的原因。我会 ping 了解更多 TS 知识的人
  • 我不确定这是否有帮助。如果可以提供更多上下文,我将添加一个指向我的项目的链接。 github.com/4imble/StackRpg/tree/master/Client/src
  • 太好了,我看看今天能不能拉下来重现

标签: typescript aurelia


【解决方案1】:

您看到的问题可能是编译器没有始终如一地提供数组扩展源文件。很可能是因为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)

另外,至少在 typescript 2.1 中,如果我尝试像你一样设置数组原型,会抱怨。这可以通过以下方式解决:

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

【讨论】:

  • 这似乎奏效了。但是我不能肯定地说,因为即使我将文件改回来也无法重现它?!可能与我升级打字稿(2.1.4)以尝试重现您提到的问题有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2017-08-06
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多