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.
55 lines
1.3 KiB
55 lines
1.3 KiB
4 weeks ago
|
// 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
|
||
|
}
|
||
|
}
|
||
|
}
|