這篇文章帶給大家的內容是關於nodejs模組的簡單理解(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
這個小短文用來快速理解 nodejs 模組(也就是 CommonJS 規範)。
本質
module.exports 用來暴露一個值,這個值預設是對象,也可以覆寫為原始值。
嘗試在一個檔案中直接log 出module 的值,可以得到:
{ id: '.', exports: {}, // 默认空对象 parent: null, filename: '/Users/a10.12/webpack-learning/src/module.js', loaded: false, children: [], paths: [ '...' ] }
你需要透過修改module 的exports 屬性來輸出你需要輸出的東西,而 require 用來導入一個模組,module.exports 的值是什麼,require 拿到的就是什麼。
使用
例如有module.js
module.exports = { s: 2, }
在index.js 中引入
let v = require('./module.js') console.log(v) // 输出为 { s: 2 }
原始值的情況也一樣
module.exports = 2 let v = require('./module.js') console.log(v) // 输出为 2
因為module.exports 預設是個對象,在輸出對象的時候自然有這麼一種寫法:
module.exports.s = 2
這樣require 得到的也是{ s: 2 }。
簡寫
大概是大佬們覺得module.exports 寫起來太長,於是把exports 引用到了module.exports,所以檢查這兩個東西是否相等時,返回 true:
console.log(exports === module.exports) // true
有了這個特性,在導出物件時能很方便地這麼寫:
exports.s = 2 let v = require('./module.js') console.log(v) // 输出为 2
但是你卻不能這麼寫:
// 这样 exports = 2 // 或这样 exports = { s: 2, } // 都是不可以的 let v = require('./module.js') console.log(v) // 输出为 {}
原因如同上面所說,exports 本來就只是一個對module.exports 的引用,你可以對這個引用的物件添加屬性,但是一旦用上面兩種方法覆寫了exports 對module.exports 的引用,exports 就等於無效了。
最後提醒,如果前面說的看不懂,可能需要加深對ECMAScript 引用值和原始值的理解...
這篇文章到這裡就已經全部結束了,更多其他精彩內容可以關注PHP中文網的node.js教學影片專欄! ! !
#以上是nodejs模組的簡單理解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!