【发布时间】:2013-01-10 00:32:50
【问题描述】:
我正在通过 websockets 在 HTML5 客户端和在 node.js 上运行的服务器之间执行消息传递。自然地,我选择了 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());
虽然我采用的方法有效,但我注意到当我有依赖项时它开始变得非常混乱(例如,如果我想要 a.js,我需要 x.js、y.js 和 x.js) ,并且我必须为每个希望使用这些实体的单个 node.js js 文件执行此操作。
我也不习惯使用eval 方法。虽然我想使用严格模式,但我没有安全问题,我的理解是 eval 和严格模式像油和水一样结合在一起。
所以我的问题是,在 html 项目和 node.js 项目之间包含共享 js 文件的最佳方法是什么?我更喜欢遵循严格的东西。
我应该指出,虽然围绕这个主题有几个问题,但我找不到任何可以解决我提出的具体问题的问题。我还应该补充一点,我不希望从“服务器”“提供”文件。 HTML5 客户端是“独立的”。
为了澄清,我在“通用 js 文件”中的内容类似于以下内容:
var Comms = function (options) {
...
}
在 HTML5 中,我可以通过 new Comms() 引用,这也是我希望在 node.js 中执行的操作。
【问题讨论】:
-
是的,我会说这些问题非常相似,我认为它肯定回答了他的问题。
-
如果没有,你总是可以使用 grunt 来连接文件。
-
如果我在html使用的js文件中使用exports,会不会因为exports没有定义而报错? @mpm 它没有解决我的问题,因为它更改了 js 文件以使用 node.js,这将导致它与 html 代码中断。
标签: javascript html node.js eval