keycloak-modern-login/webpack.config.js

131 lines
3.3 KiB
JavaScript

const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const THEME_NAME = "modern-login";
const customPages = [
"login",
"webauthn-authenticate",
"saml-post-form",
"select-authenticator"
];
module.exports = function (env, argv) {
const isDevelopment = argv.mode !== "production";
return {
entry: () => {
const entryList = {};
for (const entry of customPages) {
entryList[entry] = path.resolve(
__dirname,
"src",
"views",
entry,
"index.ts"
);
}
return entryList;
},
output: {
path: path.resolve(__dirname, "dist", "theme", THEME_NAME, "login"),
filename: "resources/js/[name].js",
publicPath: "/",
},
devtool: "inline-cheap-module-source-map",
resolve: {
extensions: [".ts", ".tsx", ".js", ".vue", ".json", ".scss"],
alias: {
"~": path.resolve(__dirname, "src"),
},
},
mode: isDevelopment ? "development" : "production",
watch: isDevelopment,
module: {
rules: [
{
test: /\.vue$/,
loader: "vue-loader",
options: {
sourceMap: isDevelopment,
extract: false,
},
},
{
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", "@babel/preset-typescript"],
plugins: [
"@babel/plugin-transform-runtime",
"@babel/plugin-transform-typescript",
],
},
},
},
{
test: /\.css$/,
use: [
"style-loader",
"css-loader",
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
},
},
},
],
},
],
},
plugins: [
new CleanWebpackPlugin(),
new VueLoaderPlugin(),
...customPages.map(
entry =>
new HtmlWebpackPlugin({
inject: false,
template: path.resolve(
__dirname,
"src",
"views",
entry,
"index.ftl"
),
filename: `${entry}.ftl`,
minify: false,
})
),
new CopyWebpackPlugin({
patterns: [
{
from: path.resolve(__dirname, "src", "static", "login"),
to: path.resolve(__dirname, "dist", "theme", THEME_NAME, "login"),
},
{
from: path.resolve(__dirname, "src", "static", "jar"),
to: path.resolve(__dirname, "dist"),
},
],
}),
],
...(isDevelopment
? {}
: {
optimization: {
removeAvailableModules: false,
removeEmptyChunks: false,
splitChunks: false,
},
}),
};
};