require-tree

WebJar for require-tree

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

require-tree
Last Version

Last Version

0.3.3
Release Date

Release Date

Type

Type

jar
Description

Description

require-tree
WebJar for require-tree
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/ricardobeat/require-tree

Download require-tree

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/require-tree/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>require-tree</artifactId>
    <version>0.3.3</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/require-tree/
implementation 'org.webjars.npm:require-tree:0.3.3'
// https://jarcasting.com/artifacts/org.webjars.npm/require-tree/
implementation ("org.webjars.npm:require-tree:0.3.3")
'org.webjars.npm:require-tree:jar:0.3.3'
<dependency org="org.webjars.npm" name="require-tree" rev="0.3.3">
  <artifact name="require-tree" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='require-tree', version='0.3.3')
)
libraryDependencies += "org.webjars.npm" % "require-tree" % "0.3.3"
[org.webjars.npm/require-tree "0.3.3"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

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.

Versions

Version
0.3.3