[英]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.