在节点js项目和网站项目之间共享代码

时间:2014-07-07 19:16:19

标签: node.js typescript commonjs

所以我开始用打字稿编写国际象棋引擎作为辅助项目。我最初的意图是像大多数其他通过stdin和stdout交互的国际​​象棋引擎一样的CLI。这样我就可以将它插入像Arena这样的GUI并对其他引擎进行测试。为此,我决定将其作为节点项目。

我将它设置为几个文件,其中1个是UCI(通用国际象棋界面)实现,剩下的是国际象棋逻辑和AI逻辑。在敲打了几次试图理解打字稿中的模块后,我终于开始工作了。

现在我决定自己编写一个简单的GUI作为带有html + typescript + jquery的网页会很有趣。现在,我想使用我写的所有逻辑模块,但我发现它是不可能的。根据我的理解,你不能在浏览器中使用CommonJS,所以我能让它工作的唯一方法是使用内部模块,我需要修改.ts文件以将代码包装在module X{ }块中每次我改变一些东西时,只为GUI重新编译它们。这种情况似乎远非理想,我想知道是否有办法绕过它......

3 个答案:

答案 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