You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
952 B
JavaScript
49 lines
952 B
JavaScript
6 years ago
|
'use strict';
|
||
|
|
||
|
module.exports = function generateBabelPreset({supportReact, extraBabelPresets, includeNodeModules, exclude, include} = {}) {
|
||
|
let excludeList = [];
|
||
|
|
||
|
if (!includeNodeModules) {
|
||
|
excludeList.push(/node_modules/)
|
||
|
}
|
||
|
|
||
|
if (exclude != null) {
|
||
|
excludeList = excludeList.concat(exclude);
|
||
|
}
|
||
|
|
||
|
let resolvedExtensions = [".js"];
|
||
|
let presets = ["es2015"];
|
||
|
let testRegex;
|
||
|
|
||
|
if (supportReact) {
|
||
|
resolvedExtensions.push(".jsx");
|
||
|
presets.push("react");
|
||
|
testRegex = /\.jsx?$/;
|
||
|
} else {
|
||
|
testRegex = /\.js$/;
|
||
|
}
|
||
|
|
||
|
if (extraBabelPresets != null) {
|
||
|
presets = presets.concat(extraBabelPresets);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
module: {
|
||
|
rules: [{
|
||
|
test: testRegex,
|
||
|
exclude: excludeList,
|
||
|
include: include,
|
||
|
resolve: {
|
||
|
extensions: resolvedExtensions
|
||
|
},
|
||
|
use: [{
|
||
|
loader: require.resolve("babel-loader"),
|
||
|
query: {
|
||
|
presets: presets.map(item => require.resolve(`babel-preset-${item}`))
|
||
|
}
|
||
|
}]
|
||
|
}]
|
||
|
}
|
||
|
}
|
||
|
};
|