引用我的 TypeScript 模块时出错 TS2307:找不到模块

Error referencing my TypeScript modules TS2307: Cannot find module

我正在使用 aurelia-typescript-skeleton 作为我新项目的基础。我尝试在 src 文件夹

中添加一个新的 hello.ts 文件
export class Hello {
  sayHello(name:string) : string {
    return 'Hello ' + name;
  }
}

并在如下同一文件夹中的另一个文件中引用它

import {Hello} from './hello';

export class Users {
  constructor() {
    console.log(new Hello().sayHello('Test'));
  }
}

两个文件都在同一文件夹级别。当我第一次构建时一切正常。当我对 users.ts 文件进行任何后续更改时,gulp-typescript 编译一直失败并出现我无法理解的错误。打字稿编译器的错误是

> Starting 'build-system'...
> src\users.ts(4,21): error TS2307: Cannot find module 'hello'.
> TypeScript: 1 semantic error
> TypeScript: emit succeeded (with errors)
> Finished 'build-system' after 950 ms

每当我做一个新的 gulp watch 时,都没有错误。当我 edit/change users.ts 文件时出现错误。谁能帮我理解这个错误?它必须是基本的东西...

我在 Windows 7 环境下,我在 2 台机器上遇到这个错误。

更新:

这里是repo to reproduce the problem。重现步骤:

  1. 克隆存储库,安装所有 npmjspm 依赖项。
  2. 运行 gulp watch -> 我没有出现错误
  3. 更改 users.ts 文件并保存 -> 发生错误。

更新 2:

build-system 之前添加 clean 步骤有助于避免该问题。这里是the link to commit。我仍然不确定第一手问题的实际原因。

因为只有users.ts这个改动后的文件送往后续的TS编译,而noResolve是开启的(在tsconfig.json)。

请参阅文件 build/tasks/build.js、任务 'build-system':

.pipe(changed(paths.output, {extension: '.js'}))

通过将输入文件的最后修改时间与目标文件进行比较来确定(由 gulp-changed)更改了哪些文件。所以当你运行cleanwatch,其中涉及clean时,目标被清理并且所有文件再次被发送到编译,因此没有错误。

当我尝试更新的骨架应用程序 (1.0.0-beta.1.2.2) 时,这个问题已得到修复。