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

于是我开始编写一个打字机的国际象棋引擎作为一个副项目。 我最初希望它是一个像大多数其他国际象棋引擎,通过标准input和标准输出交互的CLI。 这样我就可以将它连接到像Arena这样的GUI,并且可以对其他引擎进行testing。 为此,我决定将其作为节点项目来完成。

我将其设置为1个UCI(通用国际象棋界面)实现和其余的棋子逻辑和AI逻辑的几个文件。 在敲打我的头几次试图理解打字稿模块,我终于得到它的工作。

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

使用http://browserify.org/在前端添加类似CommonJS的支持。

但是也可以阅读这个(稍微过时)的问题和答案: 我应该如何去编写一个node.js Web应用程序与服务器和客户端代码?

为服务器和浏览器使用外部模块。

编译浏览器时,请使用开关指定AMD模块模式:

 tsc --module amd app.ts 

并使用RequireJS为您加载模块。

 <script src="require.js" data-main="app.js"></script> 

您将需要编译不同的目标,但TypeScript中的源代码可以是相同的。

我创build了一个演示项目来共享客户端和服务器之间的代码: https : //github.com/basarat/demo-fullstack/blob/master/src/Gruntfile.js

它将amd / commonjs和服务器文件的公共文件只作为commonjs编译为仅用于客户端的文件。 它使用grunt-ts来pipe理这个: https : //github.com/grunt-ts/grunt-ts