require-directory
在指定目录上递归迭代, require()` `每个文件,并返回包含这些模块的嵌套散列结构。
如何使用
安装(通过 npm)
$ npm install require-directory
用法
node.js中的一个常见模式是包含一个索引文件,该文件创建当前目录下文件的哈希值。给定如下的目录结构:
- app.js
- 路线/
- index.js
- home.js
- 身份验证/
- login.js
- logout.js
- register.js
routes/index.js 使用 require-directory 要创建哈希(而不是手动创建),如下所示:
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module);
app.js 参考文献 routes/index.js 的导出的散列/树 ./routes/ 目录:
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 上面的变量等价于:
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):
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module, './some/subdirectory');
例如,在 示例,请参阅用法部分 我们可以避免创造 routes/index.js 而是改变了第一行 app.js :
var requireDirectory = require('require-directory');
var routes = requireDirectory(module, './routes');
选项
您可以将选项散列传递给 require-directory 作为第二个参数(如果您已经将路径作为第二个参数传递给另一个目录,则可以作为第三个参数)。以下是可用的选项:
白名单
白名单(通过RegExp或函数)允许您指定只加载某些文件。
var requireDirectory = require('require-directory'),
whitelist = /onlyinclude.js$/,
hash = requireDirectory(module, {include: whitelist});
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或函数)允许您指定除某些文件外的所有文件都应该加载。
var requireDirectory = require('require-directory'),
blacklist = /dontinclude\.js$/,
hash = requireDirectory(module, {exclude: blacklist});
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中的每个模块将调用该选项。
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});
访问者也可以通过返回一个值来转换对象:
var requireDirectory = require('require-directory'),
visitor = function(obj) {
return obj(new Date());
},
hash = requireDirectory(module, {visit: visitor});
重命名键
var requireDirectory = require('require-directory'),
renamer = function(name) {
return name.toUpperCase();
},
hash = requireDirectory(module, {rename: renamer});
没有递归
var requireDirectory = require('require-directory'),
hash = requireDirectory(module, {recurse: false});
运行单元测试
$ npm run lint
$ npm test

