Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chakrit/xrequire
XREQUIRE is your index.js folder loader swiss army knife.
https://github.com/chakrit/xrequire
Last synced: about 20 hours ago
JSON representation
XREQUIRE is your index.js folder loader swiss army knife.
- Host: GitHub
- URL: https://github.com/chakrit/xrequire
- Owner: chakrit
- Created: 2012-11-19T16:51:40.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2013-04-18T10:04:56.000Z (over 11 years ago)
- Last Synced: 2024-10-31T17:27:22.509Z (15 days ago)
- Language: JavaScript
- Homepage:
- Size: 164 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[![Travis CI badge](https://api.travis-ci.org/chakrit/xrequire.png?branch=master)](http://travis-ci.org/chakrit/xrequire)
# XREQUIRE
XREQUIRE is your `index.js` folder loader swiss army knife.
```sh
$ npm install xrequire --save
```#### Obligatory feature checklist (and API documentation all in one):
* Implement your `index.js` in a single line:
```js
require('xrequire')(module)
```* Or the more common style found with other libs:
```js
module.exports = require('xrequire')(__dirname)
```* Post-process modules on the fly by passing a `map` function:
```js
require('xrequire')(module, function(exports, name, basename) {// hidden base class
function Base() { }
Base.prototype = new Object();// inject base class and other shared dependencies
return exports(Base, require('underscore'), require('async'));});
```* Filters module by passing a `filter` function:
```js
require('xrequire')(module,
{ filter:
function(name) {
return name[0] !== '_'; // modules with _ prefix should be hidden
}
}
);
```* Or `reject` works too:
```js
require('xrequire')(module,
{ reject:
function(name) {
return name[0] === '_'; // modules with _ prefix should be hidden
}
}
);
```* Append (or prepend) a namespace-specific name to your classes without having long filenames:
```js
// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get adminRole, staffRole and guestRole exportsrequire('xrequire')(module, { append: 'Role' });
```* Transform your file names into ClassNames dasherized-name or even "Titleized Long Strings Keys" via
an integrated [pksunkara/inflect](https://github.com/pksunkara/inflect) hook:```js
require('xrequire')(module, { inflect: 'classify' }); // or ...
require('xrequire')(module, { inflect: 'dasherize' }); // or ...
require('xrequire')(module, { inflect: 'titleize' }); // or ...
// other i.hooks works too.
```* The last two options together provide some nice naming capability out of the box:
```js
require('xrequire')(module, { inflect: 'classify', append: 'Role' })// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get AdminRole, StaffRole and GuestRole all neat and clean :)
```* Implemented in pure JS with high test coverage
(yeah, there wasn't much to be tested anyway.)```sh
$ make cover
```# OPTIONS
Default option values are as follows:
```js
{ filter: function(name) { return true; } // function : return true to include only wanted modules
, reject: function(name) { return false; } // function : return true to reject select modules
, map: function(exports) { return exports; } // function : transform module exports (useful w/ function() exports), extensions: 'js|coffee|litcoffee|node' // string or array : valid file extensions
, prepend: '' // string : prepend to module names before exported
, append: '' // string : append to module names before exported
, inflect: '' // string : name of inflection method to use
, magic: true // boolean : set to false to prevent module.exports magic
}
```# EVENTS
The xrequire main export object mixes in methods from an EventEmitter and will emits a
`require` event whenever a file is about to be `require`-ed. You can add a listener to
this event to adds logging, for example.```js
var xrequire = require('xrequire');xrequire.on('require', function(filePath, name) {
});
```The handler is given two arguments, the resolved path of the file being required and the
extracted name that would be used as key of the resulting hash.# DEVELOPMENT
Test `xrequire` by running
```sh
$ make test
```and generate coverage reports by running
```sh
$ make cover
```#### Things to do:
* Subfolder requires.
* Support for folder requires without needing to implement `index.js`.
* More inflection tests and validation.
* Direct name transform function.# LICENSE
BSD
# SUPPORT
Just open a [GitHub issue](https://github.com/chakrit/xrequire/issues) or ping
me on twitter [@chakrit](http://twitter.com/chakrit)