※註: 有關 node 版本切換指令, NVM 操作等請看 這篇
原本在瀏覽器層上使用 JS(用瀏覽器跑JS檔案) 時,只要是令任何變數或者 function 執行,都是在global scope 執行這些變數,但是在 node.js 環境之下運行時,其實主程式的變數、function 其實是被一個更大的 function scope 包起來的,這個 function scope 就叫做 Module Wrapper,詳細可以參考node.js 的 官方doc,所以現在主程式的結構會變成有點類似這樣的結構:
(function(exports, require, module, __filename, __dirname) {
// Module code actually lives in here
/* -------------被Module Wrapper包在這裏面----------------*/
let name = 'Andrew';
let sayHi = () => {
console.log('Hi');
}
sayHi();
/* -------------被Module Wrapper包在這裏面----------------*/
});
並且,想像這個程式就是被包在一個 function scope 裡面,我們就可以用這個 function 定義的參數 (exports, require, module, __filename, __dirname) 等等來進行一些特別的互動。
例如用 node.js 來執行上述程式(檔名為 app.js),程式碼為以下:
let name = 'Andrew';
let sayHi = () => {
console.log('Hi');
}
sayHi();
console.log(__filename);
console.log(__dirname);