所以我开始用打字稿编写国际象棋引擎作为辅助项目。我最初的意图是像大多数其他通过stdin和stdout交互的国际象棋引擎一样的CLI。这样我就可以将它插入像Arena这样的GUI并对其他引擎进行测试。为此,我决定将其作为节点项目。
我将它设置为几个文件,其中1个是UCI(通用国际象棋界面)实现,剩下的是国际象棋逻辑和AI逻辑。在敲打了几次试图理解打字稿中的模块后,我终于开始工作了。
现在我决定自己编写一个简单的GUI作为带有html + typescript + jquery的网页会很有趣。现在,我想使用我写的所有逻辑模块,但我发现它是不可能的。根据我的理解,你不能在浏览器中使用CommonJS,所以我能让它工作的唯一方法是使用内部模块,我需要修改.ts文件以将代码包装在module X{ }
块中每次我改变一些东西时,只为GUI重新编译它们。这种情况似乎远非理想,我想知道是否有办法绕过它......
答案 0 :(得分:1)
使用http://browserify.org/在前端添加类似CommonJS的支持。
但是也读过这个(稍微过时的)问答:How should I go about writing a node.js web application with both server and client side code?
答案 1 :(得分:1)
为服务器和浏览器使用外部模块。
编译浏览器时,使用开关指定AMD模块模式:
tsc --module amd app.ts
并使用RequireJS为您加载模块。
<script src="require.js" data-main="app.js"></script>
您需要针对不同的目标进行编译,但TypeScript中的源代码可以完全相同。
答案 2 :(得分:1)
我创建了一个演示项目,用于在客户端和服务器之间共享代码:https://github.com/basarat/demo-fullstack/blob/master/src/Gruntfile.js
它仅将amd / commonjs和server文件的公共文件编译为仅与客户端文件一样的公共文件作为amd。它使用grunt-ts
来管理:https://github.com/grunt-ts/grunt-ts