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.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							3.2 KiB
						
					
					
				const path = require('path') | 
						|
const babel = require('@babel/core') | 
						|
const { isWindows } = require('@vue/cli-shared-utils') | 
						|
 | 
						|
function genTranspileDepRegex (transpileDependencies) { | 
						|
  const deps = transpileDependencies.map(dep => { | 
						|
    if (typeof dep === 'string') { | 
						|
      const depPath = path.join('node_modules', dep, '/') | 
						|
      return isWindows | 
						|
        ? depPath.replace(/\\/g, '\\\\') // double escape for windows style path | 
						|
        : depPath | 
						|
    } else if (dep instanceof RegExp) { | 
						|
      return dep.source | 
						|
    } | 
						|
  }) | 
						|
  return deps.length ? new RegExp(deps.join('|')) : null | 
						|
} | 
						|
 | 
						|
module.exports = (api, options) => { | 
						|
  const useThreads = process.env.NODE_ENV === 'production' && !!options.parallel | 
						|
  const cliServicePath = path.dirname(require.resolve('@vue/cli-service')) | 
						|
  const transpileDepRegex = genTranspileDepRegex(options.transpileDependencies) | 
						|
 | 
						|
  // try to load the project babel config; | 
						|
  // if the default preset is used, | 
						|
  // there will be a VUE_CLI_TRANSPILE_BABEL_RUNTIME env var set. | 
						|
  // the `filename` field is required | 
						|
  // in case there're filename-related options like `ignore` in the user config | 
						|
  babel.loadPartialConfigSync({ filename: api.resolve('src/main.js') }) | 
						|
 | 
						|
  api.chainWebpack(webpackConfig => { | 
						|
    webpackConfig.resolveLoader.modules.prepend(path.join(__dirname, 'node_modules')) | 
						|
 | 
						|
    const jsRule = webpackConfig.module | 
						|
      .rule('js') | 
						|
        .test(/\.m?jsx?$/) | 
						|
        .exclude | 
						|
          .add(filepath => { | 
						|
            // always transpile js in vue files | 
						|
            if (/\.vue\.jsx?$/.test(filepath)) { | 
						|
              return false | 
						|
            } | 
						|
            // exclude dynamic entries from cli-service | 
						|
            if (filepath.startsWith(cliServicePath)) { | 
						|
              return true | 
						|
            } | 
						|
 | 
						|
            // only include @babel/runtime when the @vue/babel-preset-app preset is used | 
						|
            if ( | 
						|
              process.env.VUE_CLI_TRANSPILE_BABEL_RUNTIME && | 
						|
              filepath.includes(path.join('@babel', 'runtime')) | 
						|
            ) { | 
						|
              return false | 
						|
            } | 
						|
 | 
						|
            // check if this is something the user explicitly wants to transpile | 
						|
            if (transpileDepRegex && transpileDepRegex.test(filepath)) { | 
						|
              return false | 
						|
            } | 
						|
            // Don't transpile node_modules | 
						|
            return /node_modules/.test(filepath) | 
						|
          }) | 
						|
          .end() | 
						|
        .use('cache-loader') | 
						|
          .loader(require.resolve('cache-loader')) | 
						|
          .options(api.genCacheConfig('babel-loader', { | 
						|
            '@babel/core': require('@babel/core/package.json').version, | 
						|
            '@vue/babel-preset-app': require('@vue/babel-preset-app/package.json').version, | 
						|
            'babel-loader': require('babel-loader/package.json').version, | 
						|
            modern: !!process.env.VUE_CLI_MODERN_BUILD, | 
						|
            browserslist: api.service.pkg.browserslist | 
						|
          }, [ | 
						|
            'babel.config.js', | 
						|
            '.browserslistrc' | 
						|
          ])) | 
						|
          .end() | 
						|
 | 
						|
    if (useThreads) { | 
						|
      const threadLoaderConfig = jsRule | 
						|
        .use('thread-loader') | 
						|
          .loader(require.resolve('thread-loader')) | 
						|
 | 
						|
      if (typeof options.parallel === 'number') { | 
						|
        threadLoaderConfig.options({ workers: options.parallel }) | 
						|
      } | 
						|
    } | 
						|
 | 
						|
    jsRule | 
						|
      .use('babel-loader') | 
						|
        .loader(require.resolve('babel-loader')) | 
						|
  }) | 
						|
}
 | 
						|
 |