From 8a28426f3aba3cae6c85ecdc80673de048d53b40 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 8 Oct 2017 00:21:28 -0400 Subject: [PATCH] fix: resolve native ES modules --- src/util/resolve-components.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util/resolve-components.js b/src/util/resolve-components.js index 78c4addc0..3f7608cd5 100644 --- a/src/util/resolve-components.js +++ b/src/util/resolve-components.js @@ -20,7 +20,7 @@ export function resolveAsyncComponents (matched: Array): Function { pending++ const resolve = once(resolvedDef => { - if (resolvedDef.__esModule && resolvedDef.default) { + if (isESModule(resolvedDef)) { resolvedDef = resolvedDef.default } // save resolved on async factory in case it's used elsewhere @@ -86,6 +86,14 @@ export function flatten (arr: Array): Array { return Array.prototype.concat.apply([], arr) } +const hasSymbol = + typeof Symbol === 'function' && + typeof Symbol.toStringTag === 'symbol' + +function isESModule (obj) { + return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') +} + // in Webpack 2, require.ensure now also returns a Promise // so the resolve/reject functions may get called an extra time // if the user uses an arrow function shorthand that happens to