代码在 这里
用法:由于没有发布到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') }