节点js需要代码而不是文件

时间:2016-12-31 23:41:32

标签: javascript node.js require

我正在尝试设置一个接口,我可以编写一个可以在服务器(nodejs)和客户端(javascript)上使用的js文件。

示例文件是Vector对象,我想在客户端和服务器上使用它,因为我正在创建一个多人游戏。

在node.js中,我知道你可以使用以下语法来要求源文件......

var Vector = require('./vector');

然后,您可以通过输入module.exports来访问其Vector

这里的问题是,对于服务器,我需要在文件末尾添加一些额外的代码......

module.exports = Vector;

...客户端没有必要。

是否可能需要源代码,如下所示?

var data = (...) // get data from vector.js file
var Vector = require_code(data + 'module.exports = Vector');

如果没有,可能还有另一种方法可以完成我想要完成的任务。

这可能听起来有些令人困惑,但非常感谢帮助!

提前致谢,

大卫。

1 个答案:

答案 0 :(得分:1)

听起来像是在寻找UMDs - 通用模块定义。

(function (root, factory) {
    if (typeof define === "function" && define.amd) {
        define(["jquery", "underscore"], factory);
    } else if (typeof exports === "object") {
        module.exports = factory(require("jquery"), require("underscore"));
    } else {
        root.Requester = factory(root.$, root._);
    }
}(this, function ($, _) {
    // this is where I defined my module implementation

    var Requester = { // ... };

    return Requester;
}));

您需要将root.Requestor中的名称更改为模块的名称。 root获取this的值,该值将成为全局对象或您通常在浏览器上调用window的内容。

此特定示例将jQueryunderscore视为示例依赖项,但如果需要,它们很容易分解出来。