--- tags: Blue 的學習紀錄, Node.js --- # Node.js - module.exports vs exports 參考自 <https://nodejs.dev/learn/expose-functionality-from-a-nodejs-file-using-exports> 在 Node.js 要包裝出一個 Module 時,有兩種方式 1. `module.exports` ```javascript= // car.js const car = { brand: 'Ford', model: 'Fiesta' } module.exports = car ``` ```javascript= // index.js const car = require('./car') ``` 2. `exports` ```javascript= // car.js const car = { brand: 'Ford', model: 'Fiesta' } exports.car = car ``` ```javascript= // index.js const car = require('./car').car ``` 第一種方式,同一個 JS file 只能存在一個 `module.exports` 而第二種方式,則可以同一個 JS file 有好幾個 `exports` ## 差在哪? 根據[這篇 stackoverflow 裡的回答](https://stackoverflow.com/questions/7137397/module-exports-vs-exports-in-node-js),裡面給了各式各樣的解釋 其中,我比較喜歡[這則解釋](https://stackoverflow.com/a/18178696/14498782) 只有在 override `exports` 這個物件時,`module.exports` 和 `exports` 才會有差異,否則兩者都是指向同一個物件 由於我不知道會有什麼情況需要 override `exports`,所以我認為只要知道 `exports` 和 `module.exports` 用起來是一樣的,這樣就行了,不必去探討「兩者到底指向哪個物件?」這個議題 ## require, exports, imports and beyond <https://adrianmejia.com/getting-started-with-node-js-modules-require-exports-imports-npm-and-beyond/> 後來找到了這篇文章,介紹得非常清楚