包括带有html和node.js的js文件
我正在通过运行在node.js上的HTML5客户端和服务器之间的websockets执行消息传递。 当然,我选择了JSON作为消息格式,并创建了常见的JavaScript代码,定义了各种消息内容类型和转换操作。 JavaScript代码在两个项目之间共享。
我创建了我的Web客户端作为一个git项目,我的服务器作为另一个git项目。 部分原因是我使用phonegap为各种基于触摸的环境构建基于webkit的客户端。 这也是各种逻辑的一个很好的分离。
为了共享通用代码,我为公共逻辑创建了一个单独的项目,并使用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和strict模式可以像油和水一样走到一起。
所以我的问题是,在html项目和node.js项目之间包含共享js文件的最佳方法是什么? 我宁愿遵循严格的规定。
我应该注意的是,虽然围绕这个话题有几个问题,但我找不到解决我提出的具体问题的任何问题。 我还应该补充一点,我不希望'服务'来自'服务器'的文件。 HTML5客户端将是“独立”的。
澄清一下,我在'common js files'中的内容如下:
var Comms = function (options) {
...
}
在HTML5中,我可以通过new Comms()
引用,这也是我希望在node.js中做的事情。
你研究过Node模块是如何工作的吗? 如果您正在使用这种模式进行开发,那么在服务器上使用require('./common/js/comms')
,同时仍然将其包含在客户端上非常简单。
本文应该指出您的正确方向:https://caolan.org/posts/writing_for_node_and_the_browser.html
以下是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
希望有所帮助!
链接地址: http://www.djcxy.com/p/68899.html