IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    写了一个requireDir的小工具,可以深度遍历所有目录

    acookiebear发表于 2016-10-02 00:56:13
    love 0

    代码在 这里
    用法:因为没有发布到npm,所以就把这个文件里面的代码拷贝下来自己建一个模块,比如叫require-dir.js

    const requireDir = require('path/to/require-dir')

    第一个参数固定为__dirname,第二个参数为需要require的目录

    假设目录结构如下:

    |_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')
    }


沪ICP备19023445号-2号
友情链接