Skip to content

Commit be063b2

Browse files
committed
fix: improve require es module
Compile such as babel, typescript will compile es module always containing `__esModule`, we should do right things. Typescript 2.2 fix this bug in microsoft/TypeScript#13871
1 parent 29051c9 commit be063b2

File tree

10 files changed

+71
-21
lines changed

10 files changed

+71
-21
lines changed

lib/loader/mixin/extend.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
const path = require('path');
4-
const interopRequire = require('interop-require');
54
const debug = require('debug')('egg-core:extend');
65
const utils = require('../../utils');
76

@@ -85,13 +84,7 @@ module.exports = {
8584
continue;
8685
}
8786

88-
let ext;
89-
try {
90-
ext = interopRequire(filepath);
91-
} catch (err) {
92-
err.message = `[egg-core] load file ${require.resolve(filepath)} error: ${err.message}`;
93-
throw err;
94-
}
87+
const ext = utils.loadFile(filepath);
9588

9689
const properties = Object.getOwnPropertyNames(ext)
9790
.concat(Object.getOwnPropertySymbols(ext));

lib/utils/index.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,23 @@
22

33
const co = require('co');
44
const path = require('path');
5-
const interopRequire = require('interop-require');
65
const homedir = require('node-homedir');
76
const is = require('is-type-of');
87

98

109
module.exports = {
1110

1211
loadFile(filepath) {
13-
let exports;
1412
try {
15-
exports = interopRequire(filepath);
13+
const obj = require(filepath);
14+
if (!obj) return obj;
15+
// it's es module
16+
if (obj.__esModule) return 'default' in obj ? obj.default : obj;
17+
return obj;
1618
} catch (err) {
17-
err.message = 'load file: ' + filepath + ', error: ' + err.message;
19+
err.message = '[egg-core] load file: ' + filepath + ', error: ' + err.message;
1820
throw err;
1921
}
20-
return exports;
2122
},
2223

2324
existsModule(filepath) {

package.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,33 +33,32 @@
3333
},
3434
"devDependencies": {
3535
"autod": "^2.7.1",
36-
"egg-bin": "^2.0.2",
36+
"egg-bin": "^2.2.1",
3737
"egg-ci": "^1.1.0",
38-
"eslint": "^3.15.0",
38+
"eslint": "^3.16.1",
3939
"eslint-config-egg": "^3.2.0",
4040
"mm": "^2.1.0",
4141
"mz-modules": "^1.0.0",
4242
"pedding": "^1.1.0",
43-
"rimraf": "^2.5.4",
43+
"rimraf": "^2.6.0",
4444
"spy": "^1.0.0",
4545
"supertest": "^3.0.0"
4646
},
4747
"dependencies": {
4848
"co": "^4.6.0",
49-
"debug": "^2.6.0",
49+
"debug": "^2.6.1",
5050
"depd": "^1.1.0",
5151
"egg-logger": "^1.5.0",
5252
"egg-path-matching": "^1.0.0",
5353
"extend": "^3.0.0",
5454
"globby": "^6.1.0",
5555
"inflection": "^1.12.0",
56-
"interop-require": "^1.0.0",
5756
"is-type-of": "^1.0.0",
58-
"koa": "^1.2.4",
57+
"koa": "^1.2.5",
5958
"koa-router": "^5.4.0",
6059
"node-homedir": "^1.0.0",
61-
"ready-callback": "^2.0.0",
62-
"utility": "^1.9.0"
60+
"ready-callback": "^2.0.1",
61+
"utility": "^1.11.0"
6362
},
6463
"files": [
6564
"lib",
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"use strict";
2+
exports.__esModule = true;
3+
exports["default"] = null;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
exports.__esModule = true;
3+
exports["default"] = {
4+
fn() {}
5+
};

test/fixtures/loadfile/es-module.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
"use strict";
2+
exports.__esModule = true;
3+
function fn() {
4+
console.log(fn);
5+
}
6+
exports.fn = fn;

test/fixtures/loadfile/null.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = null;

test/fixtures/loadfile/object.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = { a: 1 };

test/fixtures/loadfile/zero.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = 0;

test/utils/index.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const mm = require('mm');
44
const os = require('os');
5+
const path = require('path');
56
const assert = require('assert');
67
const sleep = require('mz-modules/sleep');
78
const utils = require('../../lib/utils');
@@ -71,4 +72,37 @@ describe('test/utils/index.test.js', () => {
7172
assert.deepEqual(result, [ 1, 2 ]);
7273
});
7374
});
75+
76+
describe('loadFile', () => {
77+
const baseDir = path.join(__dirname, '../fixtures/loadfile');
78+
it('should load object', () => {
79+
const result = utils.loadFile(path.join(baseDir, 'object.js'));
80+
assert(result.a === 1);
81+
});
82+
83+
it('should load null', () => {
84+
const result = utils.loadFile(path.join(baseDir, 'null.js'));
85+
assert(result === null);
86+
});
87+
88+
it('should load null', () => {
89+
const result = utils.loadFile(path.join(baseDir, 'zero.js'));
90+
assert(result === 0);
91+
});
92+
93+
it('should load es module', () => {
94+
const result = utils.loadFile(path.join(baseDir, 'es-module.js'));
95+
assert(result.fn);
96+
});
97+
98+
it('should load es module with default', () => {
99+
const result = utils.loadFile(path.join(baseDir, 'es-module-default.js'));
100+
assert(result.fn);
101+
});
102+
103+
it('should load es module with default = null', () => {
104+
const result = utils.loadFile(path.join(baseDir, 'es-module-default-null.js'));
105+
assert(result === null);
106+
});
107+
});
74108
});

0 commit comments

Comments
 (0)