Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
require-glob
Advanced tools
require-glob
Requires multiple modules using glob patterns and combines them into a nested object.
$ npm install --save require-glob
┣━ unicorn.js
┣━ cake.js
┗━ rainbow/
┣━ red-orange.js
┣━ _yellow_green.js
┗━ BluePurple.js
var requireGlob = require('require-glob');
requireGlob(['**/*.js', '!cake.js']).then(function (modules) {
console.log(modules);
// {
// unicorn: [object Object],
// rainbow: {
// redOrange: [object Object],
// _yellow_green: [object Object],
// BluePurple: [object Object]
// }
// }
});
Returns a promise that resolves to an object containing the required contents of matching globbed files.
Returns an object containing the required contents of matching globbed files.
Type: {String|Array.<String>}
One or more minimatch
glob patterns patterns. Supports negation.
Type: {Object}
(optional)
This object is ultimately passed directly to node-glob
so check there for more options, in addition to those below.
Type: {String}
(default: __dirname
)
The current working directory in which to search. Defaults to the __dirname
of the requiring module so relative paths work the same as Node.js's require.
Type: {String}
(default: common non-glob parent)
Default is everything before the first glob starts in the first pattern (see glob-parent
).
This option has no effect if you define your own mapper
function.
requireGlob(['./src/**', './lib/**'], { cwd: '/home/jdoe/my-module' });
// base is: /home/jdoe/my-module/src
requireGlob('./{src,lib}/**', { cwd: '/home/jdoe/my-module' });
// base is: /home/jdoe/my-module
Type: {Boolean}
(default: false
)
Whether to force the reload of modules by deleting them from the cache. Useful inside watch tasks.
This option has no effect if you define your own mapper
function.
Type: {Function(options, filePath, i, filePaths) : Object}
The mapper is reponsible for requiring the globbed modules. The default mapper returns an object containing path information and the result of requiring the module.
// file: /home/jdoe/my-module/index.js
requireGlob('./src/**/*.js');
// the resulting list of files
[
'./src/unicorn.js',
'./src/rainbow/red-orange.js',
'./src/rainbow/_yellow_green.js',
'./src/rainbow/BluePurple.js',
]
// will be mapped to
[
{
cwd: '/home/jdoe/my-module',
base: '/home/jdoe/my-module/src',
path: '/home/jdoe/my-module/src/unicorn.js',
exports: require('./src/unicorn')
},
{
cwd: '/home/jdoe/my-module',
base: '/home/jdoe/my-module/src',
path: '/home/jdoe/my-module/src/rainbow/red-orange.js',
exports: require('./src/rainbow/red-orange')
},
{
cwd: '/home/jdoe/my-module',
base: '/home/jdoe/my-module/src',
path: '/home/jdoe/my-module/src/rainbow/_yellow_green.js',
exports: require('./src/rainbow/_yellow_green')
},
{
cwd: '/home/jdoe/my-module',
base: '/home/jdoe/my-module/src',
path: '/home/jdoe/my-module/src/rainbow/BluePurple.js',
exports: require('./src/rainbow/BluePurple')
}
]
Type: {Function(options, result, fileObject, i, fileObjects): Object}
The reducer is responsible for generating the final object structure. The default reducer expects an array as produced by the default mapper and turns it into a nested object. Path separators determine object nesting. Directory names and file names are converted to camelCase
. File extensions are ignored.
// mapper example is reduced to
{
unicorn: require('./src/unicorn.js'),
rainbow: {
redOrange: require('./src/rainbow/red-orange.js'),
_yellow_green: require('./src/rainbow/_yellow_green.js'),
BluePurple: require('./src/rainbow/BluePurple.js'),
}
}
Type: {any}
(default: {}
)
The initial value passed to the reducer. The default is an empty object, as expected by the default reducer.
// file: /home/jdoe/my-module/index.js
const defaultDependencies = {
clover: require('clover'),
unicorn: require('unicorn'),
};
requireGlob('./src/**/*.js', {
initialValue: defaultDependencies,
});
// reducer example is changed to
{
clover: require('clover'),
unicorn: require('./src/unicorn.js'),
rainbow: {
redOrange: require('./src/rainbow/red-orange.js'),
_yellow_green: require('./src/rainbow/_yellow_green.js'),
BluePurple: require('./src/rainbow/BluePurple.js'),
}
}
Type: {Function(options, fileObj): String|Array.<String>}
The default reducer uses this function to generate a unique key path for every module. The default keygen converts hyphenated and dot-separated sections of directory names and the file name to camelCase
. File extensions are ignored. Path separators determine object nesting.
This option has no effect if you define your own reducer
function.
// given the mapped object
{
cwd: '/home/jdoe/my-module',
base: '/home/jdoe/my-module/src',
path: '/home/jdoe/my-module/src/fooBar/bar-baz/_bat.qux.js',
exports: require('./src/fooBar/bar-baz/_bat.qux.js')
}
// the keygen will produce
[
'fooBar',
'barBaz',
'_batQux'
]
// which the reducer will use to construct
{
fooBar: {
barBaz: {
_batQux: require('./src/fooBar/bar-baz/_bat.qux.js')
}
}
}
Standards for this project, including tests, code coverage, and semantics are enforced with a build tool. Pull requests must include passing tests with 100% code coverage and no linting errors.
$ npm test
MIT © Shannon Moeller
FAQs
Require multiple modules using glob patterns. Supports exclusions.
The npm package require-glob receives a total of 24,347 weekly downloads. As such, require-glob popularity was classified as popular.
We found that require-glob demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.