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

Node js require code instead of file

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

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

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

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

然后您可以通过输入 Vector.

来访问它的 module.exports

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

module.exports = Vector;

...客户端不需要。

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

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

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

这听起来可能有点混乱,但非常感谢您的帮助!

提前致谢,

大卫.

听起来您正在寻找 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 作为示例依赖项,但如果需要,它们很容易分解。