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