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

标签 javascript html node.js eval

我正在通过 websockets 在 HTML5 客户端和运行在 node.js 上的服务器之间执行消息传递。很自然地,我选择了 JSON 作为消息格式,并因此创建了通用的 javascript 代码,定义了各种消息内容类型和转换操作。 javascript 代码在两个项目之间共享。

我将网络客户端创建为一个 git 项目,将服务器创建为另一个 git 项目。部分原因是我正在使用 phonegap 为各种基于触摸的环境构建基于 webkit 的客户端。它还很好地分离了各种逻辑。

为了共享通用代码,我为通用逻辑创建了一个单独的项目,并使用 git 的子项目将代码“导入”到其他两个项目中。

现在这适用于基于 html5 的项目,因为我可以执行以下操作以包含代码:

<script src="common/js/comms.js" type="text/javascript"></script>

但是对于 Node ,我在尝试获取代码时遇到了问题。为了获取代码,我最终执行了以下操作:

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 中做的事情。

最佳答案

您是否研究过 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();

这样原题就解决了。

关于javascript - 包括带有 html 和 node.js 的 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532071/

相关文章:

javascript - Discord 随机图像机器人垃圾邮件

javascript - 一个html页面中的多个页面

node.js - Joi.array().includes 不是函数错误

node.js - 当我尝试将我的 Angular 应用程序部署到 heroku 时,在 multi ./src/styles.scss 中出现错误

javascript - 当我在 codeigniter 中使用 jquery 发出警报时没有任何反应

javascript - jquerymobile 再过滤

javascript - 为什么这个 jquery 脚本在更新表时创建多个警报

jquery - 为什么在此示例中获取图像 X、Y 像素颜色不起作用?

javascript - 隐藏/显示分区

node.js - Array.push,数组保持为空