Skip to content

Commit 2ce73f6

Browse files
sttkphated
authored andcommitted
New: Add beforeRequire event (closes #53) (#92)
1 parent 53dfbd1 commit 2ce73f6

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

README.md

+13-2
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,25 @@ A function called after your application is executed. When invoked, `this` will
446446

447447
### events
448448

449+
#### beforeRequire(name)
450+
451+
Emitted before a module is pre-load. (But for only a module which is specified by `opts.require`.)
452+
453+
```js
454+
var Hacker = new Liftoff({name:'hacker', require:'coffee-script'});
455+
Hacker.on('beforeRequire', function (name) {
456+
console.log('Requiring external module: '+name+'...');
457+
});
458+
```
459+
449460
#### require(name, module)
450461

451-
Emitted when a module is pre-loaded.
462+
Emitted when a module has been pre-loaded.
452463

453464
```js
454465
var Hacker = new Liftoff({name:'hacker'});
455466
Hacker.on('require', function (name, module) {
456-
console.log('Requiring external module: '+name+'...');
467+
console.log('Required external module: '+name+'...');
457468
// automatically register coffee-script extensions
458469
if (name === 'coffee-script') {
459470
module.register();

index.js

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ util.inherits(Liftoff, EE);
2626

2727
Liftoff.prototype.requireLocal = function(module, basedir) {
2828
try {
29+
this.emit('beforeRequire', module);
2930
var result = require(resolve.sync(module, { basedir: basedir }));
3031
this.emit('require', module, result);
3132
return result;

test/index.js

+14-2
Original file line numberDiff line numberDiff line change
@@ -347,20 +347,32 @@ describe('Liftoff', function() {
347347
}
348348
});
349349

350-
it('should emit `require` with the name of the module and the required module', function(done) {
350+
it('should emit `beforeRequire` and `require` with the name of the module and the required module', function(done) {
351351
var requireTest = new Liftoff({ name: 'require' });
352+
var isEmittedBeforeRequired = false;
353+
requireTest.on('beforeRequire', function(name) {
354+
expect(name).to.equal('mocha');
355+
isEmittedBeforeRequired = true;
356+
});
352357
requireTest.on('require', function(name, module) {
353358
expect(name).to.equal('mocha');
354359
expect(module).to.equal(require('mocha'));
360+
expect(isEmittedBeforeRequired).to.equal(true);
355361
done();
356362
});
357363
requireTest.requireLocal('mocha', __dirname);
358364
});
359365

360-
it('should emit `requireFail` with an error if a module can\'t be found.', function(done) {
366+
it('should emit `beforeRequire` and `requireFail` with an error if a module can\'t be found.', function(done) {
361367
var requireFailTest = new Liftoff({ name: 'requireFail' });
368+
var isEmittedBeforeRequired = false;
369+
requireFailTest.on('beforeRequire', function(name) {
370+
expect(name).to.equal('badmodule');
371+
isEmittedBeforeRequired = true;
372+
});
362373
requireFailTest.on('requireFail', function(name) {
363374
expect(name).to.equal('badmodule');
375+
expect(isEmittedBeforeRequired).to.equal(true);
364376
done();
365377
});
366378
requireFailTest.requireLocal('badmodule', __dirname);

0 commit comments

Comments
 (0)