You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.3 KiB
54 lines
1.3 KiB
// 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 |
|
} |
|
} |
|
}
|
|
|