Skip to content

Commit

Permalink
add require.moduleId to allow a module to know its ID
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanpenner committed Jun 15, 2017
1 parent f62bc54 commit 4fa0fe0
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
21 changes: 21 additions & 0 deletions README.md
Expand Up @@ -31,6 +31,27 @@ require('foo') // => 'hi';
require('foo') === require('foo/bar/baz');
```

### `require('require')`

When within a module, one can require `require`. This provides a `require` scoped to the current module. Enabling dynamic, relatively path requires.

```js

define('foo/apple', ['require'], function() { return 'apple'; });
define('foo/bar', ['require'], function(require){ return require('./apple'););

require('foo/bar'); // 'apple';
```
This scoped `require` also enables a module some reflection, in this case the ability for a module to see its own `moduleId`;
```js

define('my/name/is', ['require'], function(require) {
require.moduleId // => 'my/name/is';
});
```
### `define.exports('foo', {})`
`define.exports` enables a fastpath for non-lazy dependency-less modules, for example:
Expand Down
1 change: 1 addition & 0 deletions lib/loader/loader.js
Expand Up @@ -202,6 +202,7 @@ var loader, define, requireModule, require, requirejs;
return require(resolve(dep, name));
};
r['default'] = r;
r.moduleId = name;
r.has = function(dep) {
return has(resolve(dep, name));
};
Expand Down
12 changes: 10 additions & 2 deletions tests/all.js
Expand Up @@ -141,7 +141,6 @@ test('simple define/require', function() {
deepEqual(Object.keys(requirejs.entries), ['foo']);
});


test('define without deps', function() {
var fooCalled = 0;

Expand Down Expand Up @@ -170,7 +169,6 @@ test('define without deps', function() {
deepEqual(Object.keys(requirejs.entries), ['foo']);
});


test('multiple define/require', function() {
define('foo', [], function() {

Expand Down Expand Up @@ -1669,3 +1667,13 @@ test('define.exports', function(assert) {
define.exports('foo/bar', defaultExport);
assert.equal(require('foo/bar'), defaultExport);
});

test('require.moduleId', function(assert) {
define('foo', ['require'], function(require) {
assert.equal(require.moduleId, 'foo');
return require.moduleId;
});

define.alias('foo', 'foo/bar');
assert.equal(require('foo/bar'), 'foo');
});

0 comments on commit 4fa0fe0

Please sign in to comment.