打字稿:执行时找不到模块

Typescript : Can't find module at execution

我一直在努力尝试用不同的方式在 Typescript 中制作模块,试图优雅地封装我的代码。但是,我想我对某些事情应该如何工作感到迷茫。

本质上,我试图让两个项目一起工作:

类型定义似乎没问题。问题来自图书馆。所以我试图将定义保留在一个名为 riotGamesApi 的模块中,以及另一个名为 riotGamesTypeNode 的模块中。我尝试在第二个中导入第一个,预编译器没有检测到任何错误。

我也开始使用 mocha 为我的库编写测试。同样,预编译器在我的代码中没有发现任何错误。

这是我目前正在使用的模块:

文件riotgamesapi.d.ts(类型定义)

declare module riotGamesApi {
    export module champion {
        [...]
    }
    [some more exports]
}

declare module "riotGamesApi" {
    export = riotGamesApi;
}

文件riotgamesapi-typenode.ts(图书馆)

///<reference path="../lib/riotgamesapi-typedef/riotgamesapi" />
///<reference path="../typings/node/node" />

import * as api from "riotGamesApi";

export module riotGamesTypeNode {
    [some classes here]
}

export = riotGamesTypeNode;

文件riotgamesapi-typenode-tests.ts(库测试)

///<reference path="../lib/riotgamesapi-typedef/riotgamesapi" />
///<reference path="../src/riotgamesapi-typenode" />

import * as api from 'riotGamesApi';
import * as rtnode from '../src/riotgamesapi-typenode';

[Using rtnode in code]

但是在编译所有内容之后(gulp 使用 commonjses5),当我尝试 运行 测试时,遇到了这个错误:

events.js:141
      throw er; // Unhandled 'error' event
      ^
Error: Cannot find module '../src/riotgamesapi-typenode'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:289:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    [...more error lines...]

我不明白我在这里做错了什么,因为这似乎是预编译器不警告我某些事情的唯一方式。我肯定遗漏了一些东西,但是预编译器也是如此吗?

我已经链接到完整文件的内容,因此您可以根据需要查找更多信息,或者通过克隆 git 自己尝试。 (我为此使用 gulp,测试代码的任务是 gulp test

提前感谢您提出的任何建议或解决方案,因为我已经坚持了一段时间了...:)

查看您的构建输出目录,其中没有 src 目录,因此您的测试中的 ../src/riotgamesapi-typenode 永远不会解析为 riotgamesapi-typenode.js。修复您的 Gulp 配置以输出预期的目录结构。

我还应该提一下,像在 riotgamesapi-typenode.ts 中那样将命名空间(又名内部模块)与外部模块混合通常不是一个好主意,并且不再推荐使用引用路径注释(在您的 Gulp 任务)。