包括带有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

上一篇: including js files with html and node.js

下一篇: How to capture video in Octave?