我一直在努力使用Typescript中的不同方法来创建模块,试图优雅地封装我的代码。但是,我认为我迷失于一些事情应该如何运作。Typescript:在执行时找不到模块
本质上讲,我试图让两个项目一起工作:
- 一个类型定义的API的操作(https://github.com/Protectator/riotgamesapi-typedef)
- 使用这些定义来拨打电话在Node.js的库(https://github.com/Protectator/riotgamesapi-typenode)
类型定义似乎没问题。图书馆出现问题。所以我试图将这些定义保存在一个名为riotGamesApi
的模块中,另一个模块名为riotGamesTypeNode
。我尝试在第二个导入第一个,并且预编译器没有检测到任何错误。
我也开始使用摩卡书写我的图书馆的测试。同样,预编译器在我的代码中没有发现任何错误。
以下是我目前在做与模块:
文件riotgamesapi.d.ts(类型定义)
declare module riotGamesApi {
export module champion {
[...]
}
[some more exports]
}
declare module "riotGamesApi" {
export = riotGamesApi;
}
///<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]
但(使用commonjs
和es5
有一整套),当我尝试运行测试编译后的一切,遇到这样的错误:
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
)
非常感谢您提供任何建议或解决方案,因为我一直坚持这一段时间。 .. :)
谢谢你的回答。我一直在尝试引用模块而不使用路径,但我无法设法使其工作。在文件“riotgamesapi-typenode.ts”中,我现在只使用了“module riotGamesTypeNode”而不是“export”语句。这是做到这一点的正确方法吗?因为测试文件,即使在使用'/// '引用它之后,'从'riotGamesTypeNode'导入*为rtnode的语句;'仍然找不到该模块(在编译时告诉我这一点)。那么你能看到我在这里做错了吗? (我已经推出了一个新版本git) –
@Protectator你正在尝试使用ES6风格的导入语句来导入一个内部模块,它不能像那样工作,它只能用于外部模块。我已经为你解决了问题并提交了一个[PR](https://github.com/Protectator/riotgamesapi-typenode/pull/2),但这不一定是最简单的方法,但至少它现在工作,如果需要的话,你可以改进。 –
是的,你所做的改变正在发挥作用。非常感谢你的帮助,我正在研究你是如何做到这一点的:)我终于可以按照我最初的计划工作。 –