fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

131 lines
4.0 KiB

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const autoprefixer = require("autoprefixer");
const path = require("path");
const fs = require("fs");
const dirs = require("./dirs");
const attachments = require("./attachments");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const childProcess = require("child_process");
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
const webpack = require("webpack");
const TerserPlugin = require("terser-webpack-plugin");
let lessVariables = {};
if (process.env.LESS_CONFIG_PATH) {
const lessConfigPath = path.isAbsolute(process.env.LESS_CONFIG_PATH)
? process.env.LESS_CONFIG_PATH
: path.resolve(__dirname, "../", process.env.LESS_CONFIG_PATH);
lessVariables = fs.existsSync(lessConfigPath) ? require(lessConfigPath) || {} : {};
}
function git(command) {
return childProcess.execSync(`git ${command}`).toString().trim();
}
module.exports = {
entry: {
fineui: attachments.fineui,
"fineui.worker": attachments.fineuiForWorker,
"fineui_without_jquery_polyfill": attachments.fineuiWithout_Jquery_Polyfill,
},
externals: {
lodash: "_",
underscore: "_",
},
resolve: {
mainFields: ["module", "main"],
extensions: [".js", ".ts"],
alias: {
"@": path.resolve(__dirname, "../src"),
},
},
module: {
rules: [
{
test: /\.(jsx?|tsx?)$/i,
include: [
dirs.NODE_MODULES,
dirs.PRIVATE,
dirs.PUBLIC,
dirs.MOBILE,
dirs.DEMO,
dirs.I18N,
dirs.UI,
dirs.FIX,
dirs.TYPESCRIPT,
dirs.SRC,
],
exclude: /node_modules(\/|\\)core-js/,
use: [
{
loader: "babel-loader",
options: {
configFile: dirs.BABEL_CONFIG,
},
},
],
},
{
test: /\.(css|less)$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
url: false,
},
},
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [autoprefixer],
},
},
},
{
loader: "less-loader",
options: {
lessOptions: {
relativeUrls: false,
modifyVars: lessVariables,
},
},
},
],
},
],
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].css",
}),
new ForkTsCheckerWebpackPlugin({}),
],
optimization: {
usedExports: false,
minimize: true,
minimizer: [
new TerserPlugin({
include: /\.min/,
parallel: true,
terserOptions: {
format: {
comments: /\/*! time:(.*?); branch:(.*?); commit:(.*?)/,
},
},
}),
new webpack.BannerPlugin({
banner: `time: ${new Date().toLocaleString("en-US")}; branch: ${git(
'name-rev --name-only HEAD'
)}; commit: ${git(
'rev-parse HEAD'
)}`
}),
new CssMinimizerPlugin(),
],
},
};