2016-12-31 73 views
0

我试图设置一个接口,我可以在其中编写一个可以在服务器(nodejs)和客户端(javascript)上使用的js文件。节点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'); 

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

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

在此先感谢,

David。

回答

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