Skip to content

Commit bd189eb

Browse files
authored
support ES6 default require for packages (atom#21112)
This allows loading the packages that are Es module and export their function wrapped in a default object. This is the case for any package that uses Babel 6, Babel 7, or other modern compilers for transpiling their package.
1 parent d93f2dd commit bd189eb

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/module-utils.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// a require function with both ES5 and ES6 default export support
2+
function requireModule(path) {
3+
const modul = require(path);
4+
if (modul === null || modul === undefined) {
5+
// if null do not bother
6+
return modul;
7+
} else {
8+
if (
9+
modul.__esModule === true &&
10+
(modul.default !== undefined && modul.default !== null)
11+
) {
12+
// __esModule flag is true and default is exported, which means that
13+
// an object containing the main functions (e.g. activate, etc) is default exported
14+
return modul.default;
15+
} else {
16+
return modul;
17+
}
18+
}
19+
}
20+
21+
exports.requireModule = requireModule;

src/package.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const dedent = require('dedent');
88
const CompileCache = require('./compile-cache');
99
const ModuleCache = require('./module-cache');
1010
const BufferedProcess = require('./buffered-process');
11+
const { requireModule } = require('./module-utils');
1112

1213
// Extended: Loads and activates a package's main module and resources such as
1314
// stylesheets, keymaps, grammar, editor properties, and menus.
@@ -881,8 +882,9 @@ module.exports = class Package {
881882
requireMainModule() {
882883
if (this.bundledPackage && this.packageManager.packagesCache[this.name]) {
883884
if (this.packageManager.packagesCache[this.name].main) {
884-
this.mainModule = require(this.packageManager.packagesCache[this.name]
885-
.main);
885+
this.mainModule = requireModule(
886+
this.packageManager.packagesCache[this.name].main
887+
);
886888
return this.mainModule;
887889
}
888890
} else if (this.mainModuleRequired) {
@@ -904,7 +906,7 @@ module.exports = class Package {
904906

905907
const previousViewProviderCount = this.viewRegistry.getViewProviderCount();
906908
const previousDeserializerCount = this.deserializerManager.getDeserializerCount();
907-
this.mainModule = require(mainModulePath);
909+
this.mainModule = requireModule(mainModulePath);
908910
if (
909911
this.viewRegistry.getViewProviderCount() ===
910912
previousViewProviderCount &&

0 commit comments

Comments
 (0)