zoro-cli
Version:
https://github.com/vuejs/vue-cli
74 lines (68 loc) • 2.29 kB
JavaScript
const { resolveCwd } = require('zoro-cli-util/resolve')
module.exports = ({ api, options, envUtil }) => {
const isProd = envUtil.isProduction()
const useThreads = isProd && options.parallel
api.chainWebpack(webpackConfig => {
const versions = {}
/* eslint-disable import/no-unresolved */
if (resolveCwd('babel-preset-zoro-vue')) {
versions[
'babel-preset-zoro-vue'
] = require('babel-preset-zoro-vue/package.json').version
} else if (resolveCwd('babel-preset-zoro-react')) {
versions[
'babel-preset-zoro-react'
] = require('babel-preset-zoro-react/package.json').version
}
/* eslint-enable import/no-unresolved */
const jsRule = webpackConfig.module
.rule('js')
.test(/\.(j|t)sx?$/)
.exclude.add(filepath => {
// always transpile js in vue files
// but do not transpile those in node_modules, because they maybe compiled already
// if you need to compile vue in node_modules, please use transpileDependencies
if (
/\.vue\.(j|t)sx?$/.test(filepath) &&
!/node_modules/.test(filepath)
) {
return false
}
// FIXME:
// exclude dynamic entries from cli-service
// if (filepath.startsWith(cliServicePath)) {
// return true
// }
// check if this is something the user explicitly wants to transpile
if (options.transpileDependencies.some(dep => filepath.match(dep))) {
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,
'babel-loader': require('babel-loader/package.json').version,
...versions,
},
[
'src/.babelrc.js',
'src/babel.config.js',
'.babelrc.js',
'babel.config.js',
],
),
)
.end()
if (useThreads) {
jsRule.use('thread-loader').loader('thread-loader')
}
jsRule.use('babel-loader').loader('babel-loader')
})
}