Skip to content

Commit d0cf32c

Browse files
committed
add define.default
1 parent 27b4098 commit d0cf32c

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@ require('foo/bar/baz') // => 'hi';
3131
require('foo') === require('foo/bar/baz');
3232
```
3333

34+
35+
36+
### `define.default('old/path', 'new-name')`
37+
38+
`define.default` is short-hand for `export { default } from 'foo';`
39+
40+
```js
41+
define('foo', [], () => 'hi');
42+
define.default('foo', 'foo/bar/baz');
43+
44+
require('foo/bar/baz') // => 'hi';
45+
require('foo') === require('foo/bar/baz');
46+
```
47+
3448
### `require('require')`
3549

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

lib/loader/loader.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,9 @@ var loader, define, requireModule, require, requirejs;
265265
// we don't support all of AMD
266266
// define.amd = {};
267267

268-
function Alias(id) {
268+
function Alias(id, prop) {
269269
this.id = id;
270+
this.prop = prop;
270271
}
271272

272273
define.alias = function(id, target) {
@@ -277,6 +278,16 @@ var loader, define, requireModule, require, requirejs;
277278
return new Alias(id);
278279
};
279280

281+
define.default = function(id, target) {
282+
define(id, ['exports', target], function(exports, targetExports) {
283+
Object.defineProperty(exports, 'default', {
284+
get: function() {
285+
return targetExports.default;
286+
}
287+
});
288+
});
289+
};
290+
280291
function missingModule(id, referrer) {
281292
throw new Error('Could not find module `' + id + '` imported from `' + referrer + '`');
282293
}

tests/all.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,43 @@ test('alias entries share same module instance', function() {
12601260
});
12611261
});
12621262

1263+
test('define.default with default and other exports', function() {
1264+
var count = 0;
1265+
define.default('to', 'from');
1266+
define('from', ['exports'], function(exports) {
1267+
count++;
1268+
1269+
exports.default = 'YUP';
1270+
exports.other = 'NOPE';
1271+
});
1272+
1273+
equal(count, 0);
1274+
var result = require('to');
1275+
equal(count, 1);
1276+
equal(result.default, 'YUP');
1277+
deepEqual(require('from'), {
1278+
default: 'YUP',
1279+
other: 'NOPE',
1280+
});
1281+
1282+
equal(count, 1, 'second require should use existing instance');
1283+
1284+
var stats = statsForMonitor('loaderjs', tree);
1285+
1286+
deepEqual(stats, {
1287+
define: 2,
1288+
exports: 2,
1289+
findDeps: 2,
1290+
findModule: 3,
1291+
modules: 2,
1292+
pendingQueueLength: 2,
1293+
reify: 2,
1294+
require: 2,
1295+
resolve: 1,
1296+
resolveRelative: 0
1297+
});
1298+
});
1299+
12631300
test('alias with 2 arguments entries share same module instance', function() {
12641301
var count = 0;
12651302
define.alias('foo/index', 'bar');

0 commit comments

Comments
 (0)