55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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
 | |
|     }
 | |
|   }
 | |
| }
 | 
