我是Javascript,NodeJS的新手,而且 - 显然是TypeScript。我想在src/services
(Windows)中试验编译器服务,为编辑器提供智能感知等。
据我所知,我需要能够require
NodeJS服务器中的TypeScript服务代码,并与编辑器中的代码进行通信。我找不到任何特定于NodeJS的TypeScript服务代码,因此我认为我必须使用--module amd
编译服务代码,以便通过RequireJS将其提供给NodeJS。
如果上述情况正确,我尝试使用--module amd
编译服务代码的结果与使用默认模块种类完全相同(见下文)。
$ tsc.cmd --module amd --out amd.js .\languageService.ts
$ tsc.cmd --out comm.js .\languageService.ts
$ diff.exe .\amd.js .\comm.js
$
答案 0 :(得分:2)
这无疑令人困惑,但是在AMD / RequireJS定义的“模块”意义上,languageService.ts中的代码并不属于“模块”。
规范将module
块中的内容称为“内部模块”。这就是你在languageService.ts中看到的。您可以将它们看作更像是暴露顶级名称的容器或单例(查看简单内部模块的代码gen可以明确地说明这一点)。您可以像使用常规顶级对象一样使用它们,而不需要任何模块加载器。
为require
生成外部模块(由规范命名)是通过将export
指令放在.ts文件中的顶级声明上完成的(请参阅规范第9.2.1节)。如果您有兴趣,可以下载一些样本(例如图像板)来执行此操作。
答案 1 :(得分:1)
您必须将模块定义为export module
,而不是module
,然后使用--m amd
或--module amd
进行编译。
花了我几个小时才意识到:)