模組是 Node.js 應用程序的基本組成單元,採用「一個文件即一個模組」的設計理念。模組系統讓文件之間能夠相互調用,支援 JavaScript、JSON 和 C/C++ 編譯擴展三種類型。本文通過實例詳解模組的創建、導出與引入機制。
Node.js 提供兩個核心對象:exports 作為模組公開接口,require 用於獲取外部模組的接口(即該模組的 exports 對象)。模組路徑解析規則:./ 表示當前目錄,默認補全 .js 後綴。
// MyModule.js
var name;
exports.setName = function (theName) { name = theName; }
exports.sayHello = function () { console.log('hello guys my name is ' + name); }
// app.js
var myMD1 = require('./MyModule');
myMD1.setName('longlingxiu');
myMD1.sayHello();
此例通過 exports 逐個掛載方法,適合導出多個獨立功能的場景。
// MyModule.js
function Hello() {
var name;
this.setName = function (theName) { name = theName; }
this.sayHello = function () { console.log(name); }
}
module.exports = Hello; // 關鍵:直接導出構造函數
// app.js
var Hello = require('./MyModule');
var hello = new Hello();
hello.setName('====ok===');
hello.sayHello();
關鍵區別:module.exports 是真正的導出對象,exports 只是其引用。重新賦值 exports 會切斷與 module.exports 的關聯,導致導出失效。需用 module.exports = ... 導出類、函數或單一對象。
module.exports 導出單一職責的實體(類/函數/對象)node_modules 解析機制管理第三方依賴import/export)作為現代項目標準,配合 "type": "module" 或 .mjs 後綴理解 exports 與 module.exports 的關係是掌握 Node.js 模組系統的關鍵。合理拆分模組、明確導出介面,能顯著提升代碼可維護性與復用性。