代码在 这里
用法:由于没有宣布到npm,所以就把这个文件内里的代码拷贝下来本身建一个模块,比方叫require-dir.js
const requireDir = require('path/to/require-dir')
第一个参数固定为__dirname,第二个参数为须要require的目次。
屡次加载统一目次时,第一次加载的效果会举行缓存,今后再次运用requireDir去require该目次的时刻会直接拿到缓存的对象而不会再次应用fs去读取该目次。
假定目次构造以下:
|_src
| |_lalala
| |_wxdir
| | |_event.js
| | |_other-thing.js
| |_user.js
一. 树状构造
将全部目次中所有的js模块举行迭代,返回一个对象,对象的属性构造和目次构造一致,假如文件夹或许文件名中有非字母数字的字符,其对应的对象属性中则会移除该字符而且以其作为分开举行驼峰式定名,以下面的other-thing.js
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举行迭代,只不过返回的对象不是树状构造,而是将它与传入途径的相对途径举行支解和驼峰式定名
const lalala2 = require(__dirname, 'path/to/lalala', true)
lalala2的构造为
{
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')
}