What is require-all?
The require-all npm package is a utility that allows you to require all files within a directory. This can be particularly useful for loading all modules in a directory without having to require each one individually.
What are require-all's main functionalities?
Require all files in a directory
This feature allows you to require all files in a specified directory. In this example, all files in the 'controllers' directory will be required and stored in the 'controllers' object.
const requireAll = require('require-all');
const controllers = requireAll(__dirname + '/controllers');
Filter files by extension
This feature allows you to filter the files to be required by their extension. In this example, only JavaScript files in the 'controllers' directory will be required.
const requireAll = require('require-all');
const jsFiles = requireAll({
dirname: __dirname + '/controllers',
filter: /(.+\.js)$/
});
Recursive directory loading
This feature allows you to recursively require all files in a directory and its subdirectories. In this example, all files in the 'modules' directory and its subdirectories will be required.
const requireAll = require('require-all');
const modules = requireAll({
dirname: __dirname + '/modules',
recursive: true
});
Map filenames to module names
This feature allows you to map filenames to module names. In this example, the '.js' extension is removed from the filenames when they are used as keys in the 'controllers' object.
const requireAll = require('require-all');
const controllers = requireAll({
dirname: __dirname + '/controllers',
map: function (name, path) {
return name.replace(/\.js$/, '');
}
});
Other packages similar to require-all
require-dir
The require-dir package is similar to require-all in that it allows you to require all files in a directory. However, it is less feature-rich and does not support filtering by extension or recursive loading out of the box.
bulk-require
The bulk-require package provides similar functionality to require-all, allowing you to require multiple files at once. It also supports filtering and recursive loading, but its API is slightly different.
include-all
The include-all package is another alternative that allows you to include all files in a directory. It offers similar features such as filtering and recursive loading, but it is designed to work well with the Sails.js framework.
require-all
An easy way to require all files within a directory.
Usage
var controllers = require('require-all')({
dirname : __dirname + '/controllers',
filter : /(.+Controller)\.js$/,
excludeDirs : /^\.(git|svn)$/,
recursive : true
});
Advanced usage
If your objective is to simply require all .js and .json files in a directory you can just pass a string to require-all:
var libs = require('require-all')(__dirname + '/lib');
Constructed object usage
If your directory contains files that all export constructors, you can require them all and automatically construct the objects using resolve
:
var controllers = require('require-all')({
dirname : __dirname + '/controllers',
filter : /(.+Controller)\.js$/,
resolve : function (Controller) {
return new Controller();
}
});
Alternative property names
If your directory contains files where the names do not match what you want in the resulting property (for example, you want camelCase but the file names are snake_case), then you can use the map
function. The map
function is called on both file and directory names, as they are added to the resulting object.
var controllers = require('require-all')({
dirname : __dirname + '/controllers',
filter : /(.+Controller)\.js$/,
map : function (name, path) {
return name.replace(/_([a-z])/g, function (m, c) {
return c.toUpperCase();
});
}
});