代碼在 這裏
用法:由於沒有發佈到npm,因此就把這個文件裏面的代碼拷貝下來本身建一個模塊,好比叫require-dir.jsgit
const requireDir = require('path/to/require-dir')
第一個參數固定爲__dirname,第二個參數爲須要require的目錄。github
屢次加載同一目錄時,第一次加載的結果會進行緩存,之後再次使用requireDir去require該目錄的時候會直接拿到緩存的對象而不會再次利用fs去讀取該目錄。npm
假設目錄結構以下:緩存
|_src | |_lalala | |_wxdir | | |_event.js | | |_other-thing.js | |_user.js
一. 樹狀結構ui
將整個目錄中全部的js模塊進行迭代,返回一個對象,對象的屬性結構和目錄結構一致,若是文件夾或者文件名中有非字母數字的字符,其對應的對象屬性中則會移除該字符而且以其做爲分隔進行駝峯式命名,以下面的other-thing.jscode
const lalala = requireDir(__dirname, 'path/to/lalala')
lalala的結構爲,對象
{ user: require('path/to/user.js') wxdir: { event: require('path/to/event.js'), otherThing: require('path/to/other-thing.js') } }
二. 平行結構字符串
1.依然將整個目錄的js進行迭代,只不過返回的對象不是樹狀結構,而是將它與傳入路徑的相對路徑進行分割和駝峯式命名get
const lalala2 = require(__dirname, 'path/to/lalala', true)
lalala2的結構爲it
{ user: require('path/to/user.js'), wxdirEvent: require('path/to/event.js'), wxdirOtherThing: require('path/to/other-thing.js') }
2.自定義命名規則,第三個參數能夠傳入一個對象{ nameHandler: func },func的惟一參數是一個字符串,返回值仍是字符串,requireDir返回的對象的屬性則是本來的熟悉傳入func後的返回值
const lalala3 = require(__dirname, 'path/to/lalala', { nameHandler: i => `$${i}` })
lalala3的結構爲
{ $user: require('path/to/user.js'), $wxdirEvent: require('path/to/event.js'), $wxdirOtherThing: require('path/to/other-thing.js') }