包括带有html和node.js的js文件

我正在通过运行在node.js上的HTML5客户端和服务器之间的websockets执行消息传递。 当然,我selectJSON作为消息格式,并创build了常见的JavaScript代码,定义了各种消息内容types和转换操作。 JavaScript代码在两个项目之间共享。

我创build了我的web客户端作为一个git项目,我的服务器作为另一个git项目。 部分原因是因为我正在使用phonegap为各种基于触摸的环境构build基于webkit的客户端。 这也是各种逻辑的一个很好的分离。

为了共享公共代码,我为公共逻辑创build了一个单独的项目,并使用git的子项目将代码“导入”其他两个项目。

现在这对基于html5的项目工作正常,因为我可以做以下包括代码:

<script src="common/js/comms.js" type="text/javascript"></script> 

然而,使用节点时,我试图获取代码时遇到了问题。 得到代码,我已经结束了以下操作:

 var fs = require('fs'); eval(fs.readFileSync('./common/js/comms.js').toString()); 

虽然我采取的方法工作,我注意到,当我有依赖(如,我需要x.js,y.js和x.js,如果我想a.js),它开始变得非常混乱,我必须为每一个希望使用这些实体的node.js js文件做这件事。

我也不舒服使用eval方法。 我没有安全问题,虽然我想使用严格的模式,这是我的理解,eval和严格模式像油和水一起走到一起。

所以我的问题是什么是在HTML项目和node.js项目之间包含共享js文件的最佳方法? 我宁愿遵循严格的东西。

我应该注意的是,虽然围绕这个话题有几个问题,但我找不到解决我提出的具体问题的任何问题。 我还要补充一点,我不希望“服务”来自“服务器”的文件。 HTML5客户端将是“独立”的。


澄清一下,我在“常用js文件”中的内容如下:

 var Comms = function (options) { ... } 

在HTML5中,我可以直接引用new Comms() ,这也是我想要在node.js中做的事情。

你研究过Node模块是如何工作的吗? 如果您正在开发使用这种模式,那么在服务器上使用require('./common/js/comms')相当简单,同时仍然将其包含在您的客户端上。

这篇文章应该指出你在正确的方向: http : //caolanmcmahon.com/posts/writing_for_node_and_the_browser/


以下是Tyler在他的评论中链接到的代码。

示例(example.js):

 if(typeof exports == "undefined"){ exports = this; } Example = function() { this.init(); }; Example.prototype = { init: function() { console.log('hello world'); } }; exports.Example = new Example(); 

example.js(app.js)的node.js用法:

 example = require('./example'); 

example.js(index.html)的html用法:

 <html> <head> <title></title> </head> <body> <script src="./example.js"></script> </body> 

OP exports.Example的更改是将exports.Example分配给Example而不是新的实例。 因此,node.js逻辑可以使用以下内容:

 var Example = require('./example.js').Example; var foo = new Example(); 

这样原来的问题就解决了。

看看nodeJS模块 。

将在comm.js中:

 module.exports = function(/* any dependency? */){ // things // you can return some object } 

在文件中你需要comm.js

 require('./common/js/comm.js')(); // or you can assign it to a variable if it returned something 

希望有所帮助!