Skip to content

Commit 7b5dc9a

Browse files
authored
Merge pull request #129 from mlunoe/mlunoe/optional-default-export-creation
Adds option to prevent loader.js modifying export
2 parents c5f7f9a + 005756f commit 7b5dc9a

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@ loader.wrapModules = function(name, callback) {
129129
};
130130
```
131131
132+
## makeDefaultExport
133+
134+
loader.js creates default exports for ember-cli `amdStrict` mode. If you do not need this behavior you can disable it like so:
135+
136+
```js
137+
loader.makeDefaultExport = false;
138+
```
139+
132140
## Tests
133141
134142
We use [testem](https://github.com/airportyh/testem) for running our test suite.

lib/loader/loader.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ var loader, define, requireModule, require, requirejs;
7171
}
7272
}
7373
}
74-
}
74+
},
75+
// Option to enable or disable the generation of default exports
76+
makeDefaultExport: true
7577
};
7678

7779
var registry = dict();
@@ -138,7 +140,9 @@ var loader, define, requireModule, require, requirejs;
138140
if (!(this.hasExportsAsDep && result === undefined)) {
139141
this.module.exports = result;
140142
}
141-
this.makeDefaultExport();
143+
if (loader.makeDefaultExport) {
144+
this.makeDefaultExport();
145+
}
142146
return this.module.exports;
143147
};
144148

tests/all.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ module('loader.js api', {
5454
test('has api', function() {
5555
equal(typeof loader, 'object');
5656
equal(typeof loader.noConflict, 'function');
57+
equal(typeof loader.makeDefaultExport, 'boolean');
5758
equal(typeof require, 'function');
5859
equal(typeof define, 'function');
5960
strictEqual(define.amd, undefined);
@@ -403,6 +404,89 @@ test('deep nested relative import/export', function() {
403404
});
404405
});
405406

407+
test('assigns default when makeDefaultExport option enabled', function() {
408+
equal(loader.makeDefaultExport, true);
409+
410+
var theObject = {};
411+
define('foo', ['require', 'exports', 'module'], function() {
412+
return theObject;
413+
});
414+
ok(('default' in require('foo')));
415+
equal(require('foo'), theObject);
416+
equal(theObject.default, theObject);
417+
418+
var stats = statsForMonitor('loaderjs', tree);
419+
420+
deepEqual(stats, {
421+
findDeps: 1,
422+
define: 1,
423+
exports: 1,
424+
findModule: 2,
425+
modules: 1,
426+
reify: 1,
427+
require: 2,
428+
resolve: 0,
429+
resolveRelative: 0,
430+
pendingQueueLength: 1
431+
});
432+
});
433+
434+
test('doesn\'t assign default when makeDefaultExport option is disabled', function() {
435+
var _loaderMakeDefaultExport = loader.makeDefaultExport;
436+
loader.makeDefaultExport = false;
437+
var theObject = {};
438+
define('foo', ['require', 'exports', 'module'], function() {
439+
return theObject;
440+
});
441+
ok(!('default' in require('foo')));
442+
deepEqual(require('foo'), {});
443+
444+
var stats = statsForMonitor('loaderjs', tree);
445+
446+
deepEqual(stats, {
447+
findDeps: 1,
448+
define: 1,
449+
exports: 1,
450+
findModule: 2,
451+
modules: 1,
452+
reify: 1,
453+
require: 2,
454+
resolve: 0,
455+
resolveRelative: 0,
456+
pendingQueueLength: 1
457+
});
458+
459+
// clean up
460+
loader.makeDefaultExport = _loaderMakeDefaultExport;
461+
});
462+
463+
test('doesn\'t assign default when makeDefaultExport option is enabled and default is already defined', function() {
464+
equal(loader.makeDefaultExport, true);
465+
466+
var theObject = { default: 'bar' };
467+
define('foo', ['require', 'exports', 'module'], function() {
468+
return theObject;
469+
});
470+
ok(('default' in require('foo')));
471+
equal(require('foo').default, 'bar');
472+
deepEqual(require('foo'), { default: 'bar' });
473+
474+
var stats = statsForMonitor('loaderjs', tree);
475+
476+
deepEqual(stats, {
477+
findDeps: 1,
478+
define: 1,
479+
exports: 1,
480+
findModule: 3,
481+
modules: 1,
482+
reify: 1,
483+
require: 3,
484+
resolve: 0,
485+
resolveRelative: 0,
486+
pendingQueueLength: 1
487+
});
488+
});
489+
406490
test('incorrect lookup paths should fail', function() {
407491

408492
define('foo/isolated-container', [], function() {
@@ -1416,6 +1500,7 @@ test('alias chaining with relative deps works', function() {
14161500
test('wrapModules is called when present', function() {
14171501
var fooCalled = 0;
14181502
var annotatorCalled = 0;
1503+
var _loaderWrapModules = loader.wrapModules;
14191504
loader.wrapModules = function(id, callback) {
14201505
annotatorCalled++;
14211506
return callback;
@@ -1442,6 +1527,9 @@ test('wrapModules is called when present', function() {
14421527
resolveRelative: 0,
14431528
pendingQueueLength: 1
14441529
});
1530+
1531+
// clean up
1532+
loader.wrapModules = _loaderWrapModules;
14451533
});
14461534

14471535
test('import require from "require" works', function () {

0 commit comments

Comments
 (0)