qu-build
Version:
Build tools for FE
187 lines (156 loc) • 6.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = getWebpackCommonConfig;
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.regexp.split");
require("core-js/modules/es6.function.name");
var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
var _fs = require("fs");
var _path = require("path");
var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
var _getBabelCommonConfig = _interopRequireDefault(require("./get-babel-common-config"));
var _friendlyErrorsWebpackPlugin = _interopRequireDefault(require("friendly-errors-webpack-plugin"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function getWebpackCommonConfig(args) {
var pkgPath = (0, _path.join)(args.cwd, 'package.json');
var pkg = (0, _fs.existsSync)(pkgPath) ? require(pkgPath) : {};
if (!pkg.name) {
var _args$cwd$split$splic = args.cwd.split('/').splice(-1),
_args$cwd$split$splic2 = _slicedToArray(_args$cwd$split$splic, 1),
name = _args$cwd$split$splic2[0];
pkg.name = name;
}
if (!pkg.entry) {
pkg.entry = _defineProperty({}, pkg.name, './src');
}
var jsFileName = args.hash ? 'js/[name]-[chunkhash:5].js' : 'js/[name].js';
var cssFileName = args.hash ? 'css/[name]-[contenthash:5].css' : 'css/[name].css';
var silent = args.silent === true;
var babelOptions = (0, _getBabelCommonConfig.default)(args);
var browsersObj = {};
if (!pkg.browserslist) {
browsersObj.browsers = ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 9', 'iOS >= 8', 'Android >= 4'];
}
var postcssOptions = {
sourceMap: true,
plugins: [(0, _autoprefixer.default)(browsersObj)]
};
var emptyBuildins = ['child_process', 'cluster', 'dgram', 'dns', 'fs', 'module', 'net', 'readline', 'repl', 'tls'];
var browser = pkg.browser || {};
var node = emptyBuildins.reduce(function (obj, name) {
if (!(name in browser)) {
return _objectSpread({}, obj, _defineProperty({}, name, 'empty'));
}
return obj;
}, {});
var config = {
options: {
babel: babelOptions,
postcss: postcssOptions
},
mode: args.dev ? 'development' : 'production',
context: args.cwd,
output: {
path: pkg.outputPath ? (0, _path.join)(args.cwd, "./".concat(pkg.outputPath, "/").concat(pkg.name, "/").concat(pkg.version)) : (0, _path.join)(args.cwd, './dist/'),
filename: jsFileName,
chunkFilename: jsFileName,
publicPath: '../'
},
devtool: args.dev || args.sourcemap ? 'source-map' : false,
optimization: {
splitChunks: {
chunks: 'all',
name: 'common',
minChunks: 2,
maxInitialRequests: 2
}
},
resolve: {
modules: ['./', 'node_modules', (0, _path.resolve)(__dirname, '../node_modules')],
extensions: ['.ts', '.tsx', '.js', '.jsx']
},
resolveLoader: {
modules: ['node_modules', (0, _path.resolve)(__dirname, '../node_modules')]
},
entry: pkg.entry,
node: node,
module: {
rules: [{
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
name: 'font/[name].[ext]',
limit: 8192,
minetype: 'application/font-woff'
}
}, {
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
name: 'font/[name].[ext]',
limit: 8192,
minetype: 'application/font-woff'
}
}, {
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
name: 'font/[name].[ext]',
limit: 8192,
minetype: 'application/octet-stream'
}
}, {
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
name: 'font/[name].[ext]',
limit: 8192,
minetype: 'application/vnd.ms-fontobject'
}
}, {
test: /\.(gif|png|jpe?g|svg)$/i,
use: [{
loader: 'url-loader',
options: {
name: 'img/[name].[ext]',
limit: 8192
}
}, {
loader: 'image-webpack-loader',
options: {
bypassOnDebug: true
}
}]
}, {
test: /\.module\.(html|htm|txt|tpl)$/,
loader: 'raw-loader'
}]
},
plugins: [new _miniCssExtractPlugin.default({
filename: cssFileName,
chunkFilename: cssFileName
}), new _friendlyErrorsWebpackPlugin.default({
onErrors: function onErrors(severity, errors) {
if (silent) return;
if (severity !== 'error') {
return;
}
var error = errors[0];
console.error("".concat(severity, " : ").concat(error.name));
}
})]
};
return config;
}