包括带有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
希望有所帮助!
- 给定一个string格式的函数如何将其转换回到JavaScript中的函数?
- Javascript eval()exception – 行号
- 在node.js中,如何以最轻量级的方式检查给定的代码串是否在语法上是正确的?
- Node.JS vm.runInNewContext()vs require()和eval()
- 从另一个lua脚本加载lua脚本
- 用fs.readFileSync和eval内容读取文件…哪个范围有function? 如何访问?
- 如何评估eval()内的console.log(1 + 2)?
- 在Eval()中完美的JavaScript语法创build错误
- 在Node中,如何在eval中需要文件?