// resolve compilers to use. let cached exports.resolveCompiler = function (ctx, loaderContext) { if (cached) { return cached } // check 2.7 try { const pkg = loadFromContext('vue/package.json', ctx) const [major, minor] = pkg.version.split('.') if (major === '2' && Number(minor) >= 7) { return (cached = { is27: true, compiler: loadFromContext('vue/compiler-sfc', ctx), templateCompiler: undefined }) } } catch (e) {} return (cached = { compiler: require('@vue/component-compiler-utils'), templateCompiler: loadTemplateCompiler(ctx, loaderContext) }) } function loadFromContext(path, ctx) { return require(require.resolve(path, { paths: [ctx] })) } function loadTemplateCompiler(ctx, loaderContext) { try { return loadFromContext('vue-template-compiler', ctx) } catch (e) { if (loaderContext) { if (/version mismatch/.test(e.toString())) { loaderContext.emitError(e) } else { loaderContext.emitError( new Error( `[vue-loader] vue-template-compiler must be installed as a peer dependency, ` + `or a compatible compiler implementation must be passed via options.` ) ) } } else { throw e } } }