包括带有html和node.js的js文件

问题描述 投票:7回答:2

我正在通过websot在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客户端应该是“独立的”。


为了澄清,我在'common js files'中的内容如下:

var Comms = function (options) {
   ...
}

在HTML5中,我可以通过new Comms()引用,这也是我想在node.js中做的。

javascript html5 node.js eval
2个回答
4
投票

您是否研究过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分配给Example而不是新实例。因此node.js逻辑可以使用以下内容:

var Example = require('./example.js').Example;
var foo = new Example();

这样原来的问题就解决了。


1
投票

看看nodeJS modules

将在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

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.