簡體   English   中英

如何為(子)模塊同時提供node.js和瀏覽器支持

[英]how to provide both node.js & browser support for (sub)modules

假設我有一個示例庫,分為兩個文件:基礎庫和附加模塊。 基本模塊位於module.js

var Calculator = {
    add: function(a, b) { return a + b; },
    sub: function(a, b) { return a - b; }
};

附加模塊位於submodule.js

if (typeof Calculator == "undefined") {                                                                                                                                                                                                                                        
        var Calculator = {};                                                                                                                                                                                                                                                   
}                                                                                                                                                                                                                                                                              

Calculator.mul = function(a, b) { return a * b; };                                                                                                                                                                                                                             

Calculator.div = function(a, b) { return a / b; };

這就是構建了多少個js庫(主模塊+子模塊),盡管它們的配置可能要好得多。 我已經准備了一個基本的index.html文件:

<html>
<head>
        <script type="text/javascript" src="module.js"></script>
        <script type="text/javascript" src="submodule.js"></script>
</head>
<body>
</body>
</html>

加載庫並使我能夠在瀏覽器中執行它(下面的控制台輸出):

Calculator.add(3,4)
7
Calculator.sub(3,4)
-1
Calculator.mul(3,4)
12
Calculator.div(3,4)
0.75

這就是圖書館的全部工作。 現在,我想提供對node.js的支持(不破壞對瀏覽器的支持)。 我已經用一個根參數將定義包含在立即調用的樂趣module.exports ,該根參數是在運行時計算的:節點的module.exports如果存在),否則為this==window (瀏覽器)。 代碼如下:

(function(root) {

        root.Calculator = {
                add: function(a, b) { return a + b; },
                sub: function(a, b) { return a - b; }
        };

}(typeof module == 'undefined' ? this : module.exports));

運行節點時,可以導入模塊:

> var c = require('./module.js')
undefined
> c
{ Calculator: { add: [Function], sub: [Function] } }

但是我該怎么導入子模塊?

socket.io就是一個很好的例子。 您可以從那里看到結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM