🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

require-tree

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

require-tree

Batch module loader, require() for directories

1.1.1
latest
Source
npm
Version published
Weekly downloads
7.4K
3.23%
Maintainers
1
Weekly downloads
 
Created
Source

require-tree

NPM

A require()-like method for directories, returning an object that mirrors the file tree.

npm install require-tree

Usage

Considering this file structure:

  • models
    • user.js
    • page.js
    • item.js

Requiring the models directory will return an object containing each exported module:

var require_tree = require('require-tree')
require_tree('./models')
/* {
    user: [object Object],
    page: [object Object],
    item: [object Object]
} */

Directories can be deeply nested, andindex.js files are merged into their parent by default:

// api/user.js:
module.exports = {
    profile: function(){},
    posts: function(){}
}

// api/pages/index.js:
module.exports = {
    list: function(){}
}

// api/pages/edit.js:
module.exports = {
    getPermissions: function(){},
    remove: function(){}
}

var api = require_tree('./api')

This will yield

  • api.user.profile
  • api.user.posts
  • api.pages.list
  • api.pages.edit.getPermissions
  • api.pages.edit.remove

Options

require_tree(path, { options })

{ name: string | function (exports) }

Use a property of the exports object as it's key (instead of the filename) in the final object.

// models/user-model.js
module.exports = {
    id: 'user',
    attrs: {}
}

require_tree('./models', { name: 'id' })
require_tree('./models', { name: function (obj) { return obj.id } })
// => { user: { id: 'user', attrs: {} } }

{ filter: string | regexp | function }

Filter the required files. Strings can use a wildcard '*' and are expanded into regular expressions. You can also provide your own RegExp, or a function that receives the filename as an argument, and returns true or false.

require_tree('./path', { filter: '*-model' })
require_tree('./path', { filter: /^model/ })
require_tree('./path', { filter: function (filename) { return filename.indexOf('model') === 0 } })

{ keys: string | array | regexp | function }

Use to return only certain keys from exported objects.

require_tree('./models', { keys: 'at*' })
require_tree('./models', { keys: ['attrs'] })
require_tree('./models', { keys: function (key){ return key.indexOf('attrs') >= 0 } })
// => { user: { attrs: {} } }

{ each: function }

Callback to run after each file is required. Doesn't modify the exported object.

require_tree('./items', { each: function (obj) { items.insert(obj) } })

{ transform: function }

Same as each, but can modify the exports object.

require_tree('./models', { transform: function (obj) { return new Model(obj) } })

{ index: 'merge', 'ignore', 'preserve' }

  • merge (default): merges the index.js exports at the root of it's parent
  • ignore: causes index.js files to not be loaded at all
  • preserve: puts the index.js export object under the .index property

For backwards compatibility, a value of true is equal to preserve, while false is equal to ignore.

  • controllers
    • index.js
    • users.js
    • ...
// controllers/index.js:
module.exports = {
    init: function () { ... }
}

var controllers = require_tree('./controllers', { index: 'preserve' })
controllers.index.init()

var controllers = require_tree('./controllers', { index: 'ignore' })
controllers.index // undefined

var controllers = require_tree('./controllers', { index: 'merge' })
controllers.init()

Limitations

require-tree must always be required in the local scope, never shared between modules or as a global. Paths are resolved relative to the parent module, like require itself, so it's behaviour depends on module.parent being set correctly. If necessary, you can use absolute paths (__dirname + '/path') or set the NODE_PATH environment variable.

Keywords

require

FAQs

Package last updated on 13 Oct 2015

Did you know?

Socket

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.

Install

Related posts