2016-12-31 61 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作爲示例依賴項,但如果您需要,它們很容易分解。