bisheng
Version:
Transform Markdown(and other static files with transformers) into a SPA website using React.
132 lines (118 loc) • 4.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = getWebpackCommonConfig;
var _path = require("path");
var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
var _caseSensitivePathsWebpackPlugin = _interopRequireDefault(require("case-sensitive-paths-webpack-plugin"));
var _friendlyErrorsWebpackPlugin = _interopRequireDefault(require("friendly-errors-webpack-plugin"));
var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
var _webpackbar = _interopRequireDefault(require("webpackbar"));
var _context = _interopRequireDefault(require("../context"));
var _getBabelCommonConfig = _interopRequireDefault(require("./getBabelCommonConfig"));
var _getTSCommonConfig = _interopRequireDefault(require("./getTSCommonConfig"));
var _CleanUpStatsPlugin = _interopRequireDefault(require("../utils/CleanUpStatsPlugin"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
/* eslint quotes:0 */
function getWebpackCommonConfig() {
var isBuild = _context["default"].isBuild,
bishengConfig = _context["default"].bishengConfig;
var NODE_ENV = process.env.NODE_ENV || 'production';
var isProd = NODE_ENV === 'production';
var fileNameHash = "[name]".concat(isProd ? '.[contenthash:6]' : '');
var chunkFileName = "".concat(fileNameHash, ".js");
var isHash = isBuild && bishengConfig.hash;
var cssFileName = isHash ? '[name]-[contenthash:8].css' : '[name].css';
var babelOptions = (0, _getBabelCommonConfig["default"])();
var tsOptions = (0, _getTSCommonConfig["default"])();
/** @type {import('webpack').Configuration} */
var config = {
mode: NODE_ENV,
output: {
filename: '[name].js',
chunkFilename: chunkFileName
},
resolve: {
modules: ['node_modules', (0, _path.join)(__dirname, '../../node_modules')],
extensions: ['.web.tsx', '.web.ts', '.web.jsx', '.web.js', '.ts', '.tsx', '.js', '.jsx', '.json']
},
resolveLoader: {
modules: ['node_modules', (0, _path.join)(__dirname, '../../node_modules')]
},
module: {
noParse: [/moment.js/],
rules: [{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: require.resolve('babel-loader'),
options: babelOptions
}, {
test: /\.tsx?$/,
use: [{
loader: require.resolve('babel-loader'),
options: babelOptions
}, {
loader: require.resolve('ts-loader'),
options: {
transpileOnly: true,
compilerOptions: tsOptions
}
}]
}, {
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
limit: 10000,
mimetype: 'application/font-woff'
}
}, {
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
limit: 10000,
mimetype: 'application/font-woff'
}
}, {
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
minetype: 'application/octet-stream'
}
}, {
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
limit: 10000,
minetype: 'application/vnd.ms-fontobject'
}
}, {
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: 'url-loader',
options: {
limit: 10000,
minetype: 'image/svg+xml'
}
}, {
test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i,
loader: 'url-loader',
options: {
limit: 10000
}
}]
},
optimization: {
minimizer: [new _terserWebpackPlugin["default"]({
parallel: true,
cache: true
})]
},
plugins: [new _miniCssExtractPlugin["default"]({
filename: cssFileName
}), new _caseSensitivePathsWebpackPlugin["default"](), new _webpackbar["default"]({
name: '🚚 Bisheng',
color: '#2f54eb'
}), new _friendlyErrorsWebpackPlugin["default"](), new _CleanUpStatsPlugin["default"]()]
};
return config;
}