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
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(), |
|
], |
|
}, |
|
};
|
|
|