@@ -5,12 +5,9 @@ import { Meteor } from 'meteor/meteor'
55import _ from 'lodash'
66import 'colors'
77
8- let templateCompiler , transpile
9-
10- if ( vueVersion === 2 ) {
11- templateCompiler = require ( 'vue-template-compiler' )
12- transpile = require ( 'vue-template-es2015-compiler' )
13- }
8+ let defaultTemplateCompiler , defaultTranspile
9+ const loadDefaultTemplateCompiler = ( ) => defaultTemplateCompiler || ( defaultTemplateCompiler = require ( 'vue-template-compiler' ) ) ;
10+ const loadDefaultTranspiler = ( ) => defaultTranspile || ( defaultTranspile = require ( 'vue-template-es2015-compiler' ) ) ;
1411
1512function toFunction ( code ) {
1613 return 'function (){' + code + '}'
@@ -546,8 +543,8 @@ function compileTags (inputFile, sfcDescriptor, parts, babelOptions, dependencyM
546543function compileOneFileWithContents ( inputFile , contents , parts , babelOptions ) {
547544 try {
548545 const cache = Cache . getCache ( inputFile )
549-
550- const sfcDescriptor = templateCompiler . parseComponent ( contents , { pad : 'line' } )
546+ const compiler = loadPackage ( inputFile , 'vue-template-compiler' , loadDefaultTemplateCompiler )
547+ const sfcDescriptor = compiler . parseComponent ( contents , { pad : 'line' } )
551548
552549 return compileTags ( inputFile , sfcDescriptor , parts , babelOptions , cache . dependencyManager )
553550 } catch ( e ) {
@@ -589,7 +586,8 @@ function generateJs (vueId, inputFile, compileResult, isHotReload = false) {
589586 // Template option
590587 js += `__vue_options__.template = __vue_template__;\n`
591588 } else if ( vueVersion === 2 ) {
592- const templateCompilationResult = templateCompiler . compile ( compileResult . template , {
589+ const compiler = loadPackage ( inputFile , 'vue-template-compiler' , loadDefaultTemplateCompiler )
590+ const templateCompilationResult = compiler . compile ( compileResult . template , {
593591 id : vueId ,
594592 warn : ( message ) => {
595593 const msg = `${ inputFilePath } : ${ message } `
@@ -617,6 +615,7 @@ function generateJs (vueId, inputFile, compileResult, isHotReload = false) {
617615 staticRenderFns = `[${ templateCompilationResult . staticRenderFns . map ( toFunction ) . join ( ',' ) } ]`
618616 let renderJs = `__vue_options__.render = ${ render } ;\n`
619617 renderJs += `__vue_options__.staticRenderFns = ${ staticRenderFns } ;\n`
618+ const transpile = loadPackage ( inputFile , 'vue-template-es2015-compiler' , loadDefaultTranspiler )
620619 renderJs = transpile ( renderJs )
621620 if ( isDev ) {
622621 renderJs += `__vue_options__.render._withStripped = true;\n`
@@ -699,3 +698,15 @@ function generateJs (vueId, inputFile, compileResult, isHotReload = false) {
699698 staticRenderFns,
700699 }
701700}
701+
702+ function loadPackage ( inputFile , packageName , loadDefaultPackage ) {
703+ try {
704+ return inputFile . require ( packageName )
705+ } catch ( err ) {
706+ // console.log(`Unable to locally load package ${packageName}: ${err.toString().substring(0,40)}`)
707+ /**
708+ * If the user doesn't have the package installed, fallback to the one bundled with this plugin.
709+ **/
710+ return loadDefaultPackage ( )
711+ }
712+ }
0 commit comments