【问题标题】:Error referencing my TypeScript modules TS2307: Cannot find module引用我的 TypeScript 模块 TS2307 时出错:找不到模块
【发布时间】:2016-01-06 09:38:09
【问题描述】:

我正在使用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 时,都没有错误。当我编辑/更改 users.ts 文件时出现错误。谁能帮我理解这个错误?它必须是一些基本的东西......

我在 Windows 7 环境中,我在 2 台机器上收到此错误。

更新:

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

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

更新2:

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

【问题讨论】:

  • 请同时添加 gulp 的错误信息。
  • @MartinVseticka 查看问题中的控制台输出 - 这就是我从 gulp 任务中得到的结果
  • 我尝试下载 repo 并安装它 [ubuntu 15.10]。构建脚本似乎对我有用。我只需要用一些修复替换/aurelia-typescript-skeleton/jspm_packages/github/aurelia/fetch-client@0.1.1/aurelia-fetch-client.d.ts(它包含错误):pastee.org/v5ghs我的gulp watch输出:pastee.org/pzskc
  • @MartinVseticka 我在 Windows 上,有什么不同吗?我的输出与您的第一次运行类似,但在第二次和后续运行时失败。在 2 台机器上测试,结果相同。
  • 很难说。我知道 gulp-typescript 及其增量编译在 Windows 上工作(我们在不同的项目中具有该功能)。所以我倾向于说,它应该可以在 Windows 上运行。我会试着在这里问gitter.im/Aurelia/Discuss

标签: typescript gulp aurelia gulp-watch


【解决方案1】:

这是因为只有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) 时,此问题已得到修复。

【讨论】:

  • 那么,编译器不是只能编译一个文件吗? (并且有点聪明地解决依赖关系)为什么它可以在 ubuntu 上工作?
  • TS 确实有编译时间module resolution。但由于启用了 noResolve,解析后的文件不会自动包含在编译中。
猜你喜欢
  • 1970-01-01
  • 2017-12-10
  • 2017-03-18
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多