| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | const path = require('path')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 = require('path').dirname(require.resolve('@vue/cli-service'))  const transpileDepRegex = genTranspileDepRegex(options.transpileDependencies)  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            }            // 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('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('thread-loader')      if (typeof options.parallel === 'number') {        threadLoaderConfig.options({ workers: options.parallel })      }    }    jsRule      .use('babel-loader')        .loader('babel-loader')  })}
 |