资讯专栏INFORMATION COLUMN

写了一个requireDir的小工具,可以遍历一个目录,并且require目录中的所有js文件

toddmark / 684人阅读

摘要:多次加载同一目录时,第一次加载的结果会进行缓存,以后再次使用去该目录的时候会直接拿到缓存的对象而不会再次利用去读取该目录。

代码在 这里
用法:因为没有发布到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")
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80592.html

相关文章

  • Gulp 制作写 Demo 小工具

    摘要:更改文件名之后,在文件中写入的代码。控制增加前缀的版本根据页面中的标签及标签中的选择器属性,来精简样式。 项目地址 既然重新学习了 Gulp,那索性就再把以前用 Gulp 写的东西拿出来,重新写一遍。这次写的时候要把要点记录下来,不然以后忘了就没法回忆了。 因为 Gulp 现在使用没有以前那么多了,所以就不写复杂的应用了。这次写一个简单的 Demo 处理工具,只是为了把 PSD 转成 ...

    tulayang 评论0 收藏0
  • vue+express+mongoose项目构建

    摘要:注仅做记录使用又不舍得删除推荐使用相关资料很多的运行环境构建基于全局安装安装过程略配置的淘宝镜象全局安装官方脚手架工具官网文档创建项目基于模板创建创建配置按需,我除了安装之外其他都选了运行与打包测试安装依赖包运行打包配 注(2018-2-12):仅做记录使用,又不舍得删除,推荐使用koa2,koa2相关资料很多的~ 1. 运行环境构建(基于macOS Sierra 10.12.4) ...

    JerryC 评论0 收藏0
  • vue+express+mongoose项目构建

    摘要:注仅做记录使用又不舍得删除推荐使用相关资料很多的运行环境构建基于全局安装安装过程略配置的淘宝镜象全局安装官方脚手架工具官网文档创建项目基于模板创建创建配置按需,我除了安装之外其他都选了运行与打包测试安装依赖包运行打包配 注(2018-2-12):仅做记录使用,又不舍得删除,推荐使用koa2,koa2相关资料很多的~ 1. 运行环境构建(基于macOS Sierra 10.12.4) ...

    SKYZACK 评论0 收藏0
  • require.js 简洁入门

    摘要:另外一个道理,一部分是依赖另一部分的,比如依赖文件的载入。其实主要做的事情就是这两点。这里只是我虚构一个假的例子,实际应用中要根据自己的实际需求去设计构思自己的项目,再次提醒,不要为了用而用。 前言 提到require.js大多数人会说提到模块化开发,AMD等等,其实require.js并没有这么多复杂的概念,这里我就希望排除这些概念,从实用的角度来简单说一下require.js是干...

    andot 评论0 收藏0
  • 【Node】前后端模块规范与模块加载原理

    摘要:例如指定一些依赖到模块中实现规范的模块化,感兴趣的可以查看的文档。 CommonJS 定义了 module、exports 和 require 模块规范,Node.js 为了实现这个简单的标准,从底层 C/C++ 内建模块到 JavaScript 核心模块,从路径分析、文件定位到编译执行,经历了一系列复杂的过程。简单的了解 Node 模块的原理,有利于我们重新认识基于 Node 搭建的...

    jsyzchen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<