模塊是一門語言編寫大項目的基石,因此,瞭解如何組織、編寫、編譯、載入模塊很重要。這裡主要談談Node中的模塊載入。 1.Node中的模塊,主要使用require來載入模塊,文件 require("./") 載入本文件夾下麵的package.json,如果沒有,則載入index.js、index.no ...
模塊是一門語言編寫大項目的基石,因此,瞭解如何組織、編寫、編譯、載入模塊很重要。這裡主要談談Node中的模塊載入。
1.Node中的模塊,主要使用require來載入模塊,文件
require("./") --- 載入本文件夾下麵的package.json,如果沒有,則載入index.js、index.node
require("some.js") --載入本文件夾下麵的some.js文件
require("lib/some.js") --載入lib/some.js文件
require("modulename") --載入當前目錄node_modules/modulename文件夾內的package.json,如果沒有,則載入index.js、index.node。如果當前目錄找不到以上內容,則進入指定全局模塊緩存目錄中載入modulename文件夾中的內容,如還未找到,則進入系統環境變數NODE_PATH指定的路徑中載入modulename文件夾內的內容。涉及到的目錄,請參看npm路徑設置。
2.Node中創建/導出模塊:module.exports
Module.exports才是真正的介面,exports只不過是它的一個輔助工具。 最終返回給調用的是Module.exports而不是exports。
所有的exports收集到的屬性和方法,都賦值給了Module.exports。
當然,這有個前提,就是Module.exports本身不具備任何屬性和方法。如果,Module.exports已經具備一些屬性和方法,那麼exports收集來的信息將被忽略。
修改rocker.js如下:
module.exports = 'ROCK IT!';
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
再次引用執行rocker.js :
var rocker = require('./rocker.js');
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'
發現報錯:對象“ROCK IT!”沒有name方法,rocker模塊忽略了exports收集的name方法,返回了一個字元串“ROCK IT!”。
結論:
1.模塊並不一定非得返回“實例化對象”。你的模塊可以是任何合法的javascript對象--boolean, number, date, JSON, string, function, array等等。
2.模塊可以是任何你設置給它的東西。如果你沒有顯式的給Module.exports設置任何屬性和方法,那麼你的模塊就是exports設置給Module.exports的屬性。
實例:
module.exports = function(name, age) {
this.name = name;
this.age = age;
this.about = function() {
console.log(this.name +' is '+ this.age +' years old');
};
};
調用:
ar Rocker = require('./rocker.js');
var r = new Rocker('Ozzy', 62);
r.about(); // Ozzy is 62 years old
3.如果你的模塊是一個特定的類型,就用Module.exports;
如果你模塊是一個典型的“實例化對象”就用exports。
給Module.exports添加屬性類似於給exports添加屬性。例如:
module.exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
同樣,exports是這樣的
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
請註意,這兩種結果並不想同。前面已經提到module.exports是真正的介面,exports只不過是它的輔助工具。推薦使用exports導出(實例化對象),除非你打算從原來的“實例化對象”改變成一個類型。
註意,webpack 預設是支持es6的。所以,在 導入/導出模塊 的時候,也可以用es6的寫法。
小結:1.nodejs中的用 require,exports 處理模塊
2..註意區別nodejs 與 es6中模塊導入,導出方法的不同之處