如何提供node.js和amp;浏览器对(子)模块的支持

时间:2014-07-18 11:22:35

标签: javascript node.js module

允许'说我有一个样本库分为2个文件:基础库和附加模块。基本模块位于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提供支持(不破坏对浏览器的支持)。我在immediate-invoked-fun-expr中附带了一个root参数,该参数在运行时计算:node 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] } }

但我该怎么办才能导入子模块?

1 个答案:

答案 0 :(得分:0)

socket.io也许就是一个很好的例子。你可以从那里看到结构。