Javascript TypeScript使用TypeScript需要共享文件
我使用TypeScript用面向对象编程来编写javascript文件。 我想使用节点模块从其他文件中获取我的.ts文件 我想在服务器端和客户端共享我的文件。(浏览器)这非常重要。请注意,文件夹/shared/不是指客户端和服务器之间的共享,而是指游戏服务器和Web服务器之间的共享。我使用pomelo.js作为框架,这就是为什么 目前我没有(成功地)使用typescript require库。 我喜欢这样: shared/lib/message.js 此文件需要Message.js来创建新实例 共享/类/消息。ts 在fil的末尾,我添加了这个try/catch,以将该类添加到module.exports(如果存在)中。(这是可行的,但这不是一个好办法,我想做得更好) 如果从浏览器加载文件,module.export将不存在 所以,我上面所做的就是工作。现在,如果我尝试使用typescript require模块,我将更改一些内容: shared/lib/message.js 我使用requireTs而不是require,它是一个全局变量。我使用的是.ts文件 共享/类/消息。ts 现在,如果我像这样尝试,并且查看控制台服务器,我会得到requireTs is object,而Message在shared/lib/Message.js中是未定义的。 如果我在消息中不使用export关键字,我会得到相同的结果。ts。即使我在最后使用我的小脚本,我总是会得到一个错误 但还有更多,我有另一个类名ValidatorMessage。ts扩展了消息。ts,如果我使用export关键字,它将不起作用 我做错什么了吗?我尝试了其他几种方法,但没有任何效果,看起来typescript require无法要求.ts文件。Javascript TypeScript使用TypeScript需要共享文件,javascript,node.js,typescript,Javascript,Node.js,Typescript,我使用TypeScript用面向对象编程来编写javascript文件。 我想使用节点模块从其他文件中获取我的.ts文件 我想在服务器端和客户端共享我的文件。(浏览器)这非常重要。请注意,文件夹/shared/不是指客户端和服务器之间的共享,而是指游戏服务器和Web服务器之间的共享。我使用pomelo.js作为框架,这就是为什么 目前我没有(成功地)使用typescript require库。 我喜欢这样: shared/lib/message.js 此文件需要Message.js来创建新实例
谢谢您的帮助。查看typescript require库,我发现它已经9个月没有更新了。由于它包括TypeScript的核心lib.d.ts类型(以及node.d.ts类型),并且在过去9个月内取得了巨大的进步(以及由于语言更新而需要的更改),它可能与最新的TypeScript版本不兼容(只是我的假设,我可能错了) 使用TypeScript在节点和浏览器之间共享模块并不容易,因为它们都使用非常不同的模块系统(节点中使用CommonJS,浏览器中通常使用类似RequireJS的东西)。TypeScript根据给定的--module开关为其中一个发出代码。(注意:有些人使用通用模块定义(UMD)模式,但TypeScript不直接支持此模式) 您到底想要实现什么目标,我可以提供一些指导。解决方案: 最后,我没有使用require-typescript,但它工作得很好。(如果使用它,必须加载lib.d.ts,否则控制台上会出现一些错误 我还没有一个在浏览器上安装脚本的解决方案(由于export关键字,我在客户端遇到了一些错误),我想添加一个exports全局变量来避免这样的错误
谢谢你的帮助,比尔。我也在做同样的事情,无论我怎么做都会遇到问题……我的主要问题是:
- 我以名称空间和组件的形式编写我的typescript,因此没有包含多个文件编译的导出模块。您必须在末尾添加一些_exporter.t来添加导出,以便将
作为一个模块导入,这将需要以下内容:库输出.js
module.exports.MyRootNamespace=MyRootNamespace
- 但是,如果您执行上述操作,则会遇到一个问题:何时需要引用其他模块中的类(例如MyRootNamespace1.SomeClass被MyRootNamespace2.SomeOtherClass引用)您可以引用它,但它会将它编译到您的
文件中,因此,如果您试图跨多个编译的目标重用typescript,那么您最终会得到重复的类(就像在VS中有一个解决方案和多个具有自己的dll输出的项目一样)library-output2.js
- 假设您不喜欢破解导出和/或复制引用,那么您可以将它们导入到全局范围,这是一种破解,但很有效……但是,当您决定测试代码时(使用任何nodejs测试框架)您将需要模拟某些东西,因为组件的依赖关系可能不会通过
调用包含在内(并且您的模块可能依赖于无法真正用于全局范围黑客攻击的节点\u模块)这使得满足依赖关系和模仿某些依赖关系变得很困难,就像是一种要么全有要么全无的方法require()
- 最后,您可以尝试通过使用typescript框架来缓解所有这些问题,例如,它允许您直接运行您的typescript,而不是先编译到js中,虽然这看起来很好,但很难调试编译错误,这是目前我首选的方法,但我有一个问题,我的typescript比较通过tsc,iles很好,但在appex上出现了一个最大堆栈大小异常,我要由项目维护人员来解决这个问题(我无法找到根本的问题)。这类项目也不多,但它们使在模块级/文件级编译等问题变得毫无意义
var Message = require('./../classes/Message');
module.exports = {
getNewInstance: function(message, data, status){
console.log(requireTs);// Global typescript-require instance
console.log(Message);
return new Message(message, data, status);
}
};
class Message{
// Big stuff
}
try{
module.exports = Message;
}catch(e){}
var Message = requireTs('./../classes/Message.ts');
export class Message{
// Big stuff
}
// remove the compatibility script at the end