# require-directory 中文文档

规范地址：https://npmcn.com/package/require-directory/

版本：2\.1\.1
npm 元数据更新时间：2022-06-26T11:36:41.323Z
中文译文更新时间：2026-11-05T01:41:15.764Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/require-directory
原文对照：https://npmcn.com/package/require-directory/?lang=original
项目主页：https://github.com/troygoode/node-require-directory/
源码仓库：https://github.com/troygoode/node-require-directory

## 关键信息（来自 npm 元数据）

- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=0\.10\.0
- 运行依赖：0 个
- 首次发布：2011-12-27T00:06:30.661Z
- 最新版本发布：2015-05-28T08:31:04.702Z
- 近 30 天下载量：552227722（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：12（近 12 个月 0 个）

## 中文简介

递归地遍历指定目录，require（）遍历每个文件，并返回包含这些模块的嵌套散列结构。

## 安装

```sh
npm install require-directory
```

也可以使用：`pnpm add require-directory`、`yarn add require-directory`、`bun add require-directory`

## README

# require-directory

在指定目录上递归迭代， `require()`\` \`每个文件，并返回包含这些模块的嵌套散列结构。

**[在Twitter上关注我（@troygoode） ！](https://twitter.com/intent/user?screen_name=troygoode)**

[![NPM](https://nodei.co/npm/require-directory.png?downloads=true&stars=true)](https://nodei.co/npm/require-directory/)

[![build status](https://secure.travis-ci.org/troygoode/node-require-directory.png)](http://travis-ci.org/troygoode/node-require-directory)

## 如何使用

### 安装(通过 [npm](https://npmjs.org/package/require-directory)）

```bash
$ npm install require-directory
```

### 用法

node.js中的一个常见模式是包含一个索引文件，该文件创建当前目录下文件的哈希值。给定如下的目录结构：

-   app.js
-   路线/
    -   index.js
    -   home.js
    -   身份验证/
        -   login.js
        -   logout.js
        -   register.js

`routes/index.js` 使用 `require-directory` 要创建哈希（而不是手动创建），如下所示：

```javascript
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module);
```

`app.js` 参考文献 `routes/index.js` 的导出的散列/树 `./routes/` 目录:

```javascript
var routes = require('./routes');

// snip

app.get('/', routes.home);
app.get('/register', routes.auth.register);
app.get('/login', routes.auth.login);
app.get('/logout', routes.auth.logout);
```

这个 `routes` 上面的变量等价于：

```javascript
var routes = {
  home: require('routes/home.js'),
  auth: {
    login: require('routes/auth/login.js'),
    logout: require('routes/auth/logout.js'),
    register: require('routes/auth/register.js')
  }
};
```

_请注意, `routes.index` 将 `undefined` 如你所愿。_

### 指定另一个目录

您可以通过将其作为第二个参数传递来指定要构建树的目录（如果由于某种原因它不是当前目录）。未指定路径(`requireDirectory(module)`)是等同的 `requireDirectory(module, __dirname)`：

```javascript
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module, './some/subdirectory');
```

例如，在 [示例，请参阅用法部分](https://npmcn.com/package/require-directory/#readme-usage) 我们可以避免创造 `routes/index.js` 而是改变了第一行 `app.js` :

```javascript
var requireDirectory = require('require-directory');
var routes = requireDirectory(module, './routes');
```

## 选项

您可以将选项散列传递给 `require-directory` 作为第二个参数（如果您已经将路径作为第二个参数传递给另一个目录，则可以作为第三个参数）。以下是可用的选项：

### 白名单

白名单（通过RegExp或函数）允许您指定只加载某些文件。

```javascript
var requireDirectory = require('require-directory'),
  whitelist = /onlyinclude.js$/,
  hash = requireDirectory(module, {include: whitelist});
```

```javascript
var requireDirectory = require('require-directory'),
  check = function(path){
    if(/onlyinclude.js$/.test(path)){
      return true; // don't include
    }else{
      return false; // go ahead and include
    }
  },
  hash = requireDirectory(module, {include: check});
```

### 黑名单

黑名单（通过RegExp或函数）允许您指定除某些文件外的所有文件都应该加载。

```javascript
var requireDirectory = require('require-directory'),
  blacklist = /dontinclude\.js$/,
  hash = requireDirectory(module, {exclude: blacklist});
```

```javascript
var requireDirectory = require('require-directory'),
  check = function(path){
    if(/dontinclude\.js$/.test(path)){
      return false; // don't include
    }else{
      return true; // go ahead and include
    }
  },
  hash = requireDirectory(module, {exclude: check});
```

### 在对象加载时访问它们

`require-directory` 取一个函数作为 `visit` 选项，对于添加到module.exports中的每个模块将调用该选项。

```javascript
var requireDirectory = require('require-directory'),
  visitor = function(obj) {
    console.log(obj); // will be called for every module that is loaded
  },
  hash = requireDirectory(module, {visit: visitor});
```

访问者也可以通过返回一个值来转换对象：

```javascript
var requireDirectory = require('require-directory'),
  visitor = function(obj) {
    return obj(new Date());
  },
  hash = requireDirectory(module, {visit: visitor});
```

### 重命名键

```javascript
var requireDirectory = require('require-directory'),
  renamer = function(name) {
    return name.toUpperCase();
  },
  hash = requireDirectory(module, {rename: renamer});
```

### 没有递归

```javascript
var requireDirectory = require('require-directory'),
  hash = requireDirectory(module, {recurse: false});
```

## 运行单元测试

```bash
$ npm run lint
$ npm test
```

## 许可证

[麻省理工学院的许可](http://www.opensource.org/licenses/mit-license.php)

## 作者

[特洛伊古德](https://github.com/TroyGoode) （[troygoode@gmail.com](mailto:troygoode@gmail.com)）

## 常见问题

### require-directory 是什么？

递归地遍历指定目录，require（）遍历每个文件，并返回包含这些模块的嵌套散列结构。

### 如何安装 require-directory？

在项目目录运行 npm install require-directory，或使用 pnpm add / yarn add / bun add。

### require-directory 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/require-directory 是否存在。

### require-directory 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### require-directory 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=0\.10\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### require-directory 可以商用吗？

require-directory 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### require-directory 的下载量有多少？

根据 npm 官方下载统计，require-directory 在 2026/10/05 – 2026/11/03 这 30 天内被下载 552,227,722 次，日均约 18,407,591 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### require-directory 还在维护吗？

最新版本 2\.1\.1 发布于 2015/05/28（11 年前）；至今共发布 12 个版本，其中过去 12 个月发布了 0 个；首次发布于 2011/12/27。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

