Met*_*kin 7 javascript html5 eval node.js
我正在通过websot在HTML5客户端和node.js上运行的服务器之间执行消息传递.当然,我选择JSON作为消息格式,因此创建了常见的javascript代码,定义了各种消息内容类型和转换操作.javascript代码在两个项目之间共享.
我创建了我的Web客户端作为一个git项目和我的服务器作为另一个git项目.部分是因为我使用phonegap为各种基于触摸的环境构建基于webkit的客户端.它也是各种逻辑的一个很好的分离.
为了共享公共代码,我为公共逻辑创建了一个单独的项目,并使用git的子项目将代码"导入"到另外两个项目中.
现在这适用于基于html5的项目,因为我可以执行以下操作来包含代码:
<script src="common/js/comms.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
但是对于节点,我在尝试获取代码时遇到了问题.为了获得代码,我最终做了以下事情:
var fs = require('fs');
eval(fs.readFileSync('./common/js/comms.js').toString());
Run Code Online (Sandbox Code Playgroud)
虽然我采取的方法有效,但我注意到当我有依赖时,它开始变得非常混乱(如我需要x.js,y.js和x.js,如果我想要a.js),我必须为希望使用任何这些实体的每个node.js js文件执行此操作.
我也不习惯使用这种eval方法.我没有安全问题,虽然我想使用严格模式,我的理解是eval和严格模式像油和水一样.
所以我的问题是,在html项目和node.js项目之间包含共享js文件的最佳方法是什么?我更喜欢严格遵守的事情.
我应该注意到,尽管围绕这个主题有几个问题,我找不到任何解决我提出的具体问题的问题.我还要补充一点,我不希望"服务"来自'服务器'的文件.HTML5客户端应该是"独立的".
为了澄清,我在'common js files'中的内容如下:
var Comms = function (options) {
...
}
Run Code Online (Sandbox Code Playgroud)
在HTML5中我可以只引用via 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();
Run Code Online (Sandbox Code Playgroud)
example.js(app.js)的node.js用法:
example = require('./example');
Run Code Online (Sandbox Code Playgroud)
example.js(index.html)的html用法:
<html>
<head>
<title></title>
</head>
<body>
<script src="./example.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
OP 的更改是分配exports.Example给Example而不是分配给新实例。因此 node.js 逻辑可以使用以下内容:
var Example = require('./example.js').Example;
var foo = new Example();
Run Code Online (Sandbox Code Playgroud)
这样原来的问题就解决了。
| 归档时间: |
|
| 查看次数: |
29221 次 |
| 最近记录: |