|
Packit Service |
eebd6f |
const path = require("path");
|
|
Packit Service |
eebd6f |
const webpack = require("webpack");
|
|
Packit Service |
eebd6f |
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
|
Packit Service |
eebd6f |
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
Packit Service |
eebd6f |
const CleanWebpackPlugin = require("clean-webpack-plugin");
|
|
Packit Service |
eebd6f |
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
|
Packit Service |
0c2606 |
const ESLintPlugin = require("eslint-webpack-plugin");
|
|
Packit Service |
eebd6f |
const babelConfig = require("./babel.config");
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
const nodedir = path.resolve(process.env.SRCDIR || __dirname, "node_modules");
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
const [mode, devtool] =
|
|
Packit Service |
eebd6f |
process.env.NODE_ENV === "production" ? ["production", "source-map"] : ["development", "inline-source-map"];
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
const output = {
|
|
Packit Service |
eebd6f |
path: path.resolve(__dirname, "./public/dist"),
|
|
Packit Service |
eebd6f |
filename: "[name].js",
|
|
Packit Service |
eebd6f |
sourceMapFilename: "[file].map",
|
|
Packit Service |
eebd6f |
};
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
// add istanbul as babel plugin to enable code coverage
|
|
Packit Service |
eebd6f |
process.argv.includes("--with-coverage") && babelConfig.plugins.push("istanbul");
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
const plugins = [
|
|
Packit Service |
eebd6f |
new CleanWebpackPlugin(["public/dist"]),
|
|
Packit Service |
eebd6f |
// automatically load jquery instead of having to import or require them everywhere
|
|
Packit Service |
eebd6f |
new webpack.ProvidePlugin({
|
|
Packit Service |
eebd6f |
$: "jquery",
|
|
Packit Service |
eebd6f |
jQuery: "jquery",
|
|
Packit Service |
eebd6f |
}),
|
|
Packit Service |
eebd6f |
// copy our assets
|
|
Packit Service |
eebd6f |
new CopyWebpackPlugin([
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
from: "./public/manifest.json",
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
]),
|
|
Packit Service |
eebd6f |
// main.js has to be injected into body and after
|
|
Packit Service |
eebd6f |
new HtmlWebpackPlugin({
|
|
Packit Service |
eebd6f |
filename: "index.html",
|
|
Packit Service |
eebd6f |
template: "public/index.ejs",
|
|
Packit Service |
eebd6f |
inject: "body",
|
|
Packit Service |
eebd6f |
}),
|
|
Packit Service |
eebd6f |
// avoid multi chunks for every index.js inside pages folder
|
|
Packit Service |
eebd6f |
new webpack.optimize.LimitChunkCountPlugin({
|
|
Packit Service |
eebd6f |
maxChunks: 1,
|
|
Packit Service |
eebd6f |
}),
|
|
Packit Service |
eebd6f |
new MiniCssExtractPlugin({
|
|
Packit Service |
eebd6f |
filename: "[name].css",
|
|
Packit Service |
eebd6f |
chunkFilename: "[name].bundle.css",
|
|
Packit Service |
eebd6f |
}),
|
|
Packit Service |
0c2606 |
new ESLintPlugin({
|
|
Packit Service |
0c2606 |
files: ["components/**/*.js, core/**/*.js, pages/**/*.js, data/**/*.js"],
|
|
Packit Service |
0c2606 |
}),
|
|
Packit Service |
eebd6f |
];
|
|
Packit Service |
eebd6f |
|
|
Packit Service |
eebd6f |
module.exports = {
|
|
Packit Service |
eebd6f |
mode,
|
|
Packit Service |
eebd6f |
entry: "./main.js",
|
|
Packit Service |
eebd6f |
plugins,
|
|
Packit Service |
eebd6f |
output,
|
|
Packit Service |
eebd6f |
devtool,
|
|
Packit Service |
eebd6f |
externals: { cockpit: "cockpit", jQuery: "jquery" },
|
|
Packit Service |
eebd6f |
// disable noisy warnings about exceeding the recommended size limit
|
|
Packit Service |
eebd6f |
performance: {
|
|
Packit Service |
eebd6f |
maxEntrypointSize: 20000000,
|
|
Packit Service |
eebd6f |
maxAssetSize: 20000000,
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
resolve: { alias: { "font-awesome": path.resolve(nodedir, "font-awesome-sass/assets/stylesheets") } },
|
|
Packit Service |
eebd6f |
module: {
|
|
Packit Service |
eebd6f |
rules: [
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
test: /\.(js|jsx)$/,
|
|
Packit Service |
eebd6f |
include: [
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./actions"),
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./components"),
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./core"),
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./pages"),
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./data"),
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./main.js"),
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
use: {
|
|
Packit Service |
eebd6f |
loader: "babel-loader",
|
|
Packit Service |
eebd6f |
options: babelConfig,
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
// add type: "javascript/auto" when transforming JSON via loader to JS
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
include: [path.resolve(__dirname, "./routes.json")],
|
|
Packit Service |
eebd6f |
use: [
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
loader: "babel-loader",
|
|
Packit Service |
eebd6f |
options: babelConfig,
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
path.resolve(__dirname, "./utils/routes-loader.js"),
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
type: "javascript/auto",
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
test: /\.css$/,
|
|
Packit Service |
eebd6f |
use: [
|
|
Packit Service |
eebd6f |
MiniCssExtractPlugin.loader,
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
loader: "css-loader",
|
|
Packit Service |
eebd6f |
options: { url: false },
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
/* HACK: remove unwanted fonts from PatternFly's css */
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
test: /patternfly-cockpit.scss$/,
|
|
Packit Service |
eebd6f |
use: [
|
|
Packit Service |
eebd6f |
MiniCssExtractPlugin.loader,
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
loader: "css-loader",
|
|
Packit Service |
eebd6f |
options: { url: false },
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
loader: "string-replace-loader",
|
|
Packit Service |
eebd6f |
options: {
|
|
Packit Service |
eebd6f |
multiple: [
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
search: /src:url[(]"patternfly-icons-fake-path\/glyphicons-halflings-regular[^}]*/g,
|
|
Packit Service |
eebd6f |
replace: 'font-display:block; src:url("../base1/fonts/glyphicons.woff") format("woff");',
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
search: /src:url[(]"patternfly-fonts-fake-path\/PatternFlyIcons[^}]*/g,
|
|
Packit Service |
eebd6f |
replace: 'src:url("../base1/fonts/patternfly.woff") format("woff");',
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
search: /src:url[(]"patternfly-fonts-fake-path\/fontawesome[^}]*/,
|
|
Packit Service |
eebd6f |
replace: 'font-display:block; src:url("../base1/fonts/fontawesome.woff?v=4.2.0") format("woff");',
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
search: /src:url\("patternfly-icons-fake-path\/pficon[^}]*/g,
|
|
Packit Service |
eebd6f |
replace: 'src:url("../base1/fonts/patternfly.woff") format("woff");',
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
search: /@font-face[^}]*patternfly-fonts-fake-path[^}]*}/g,
|
|
Packit Service |
eebd6f |
replace: "",
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
{
|
|
Packit Service |
eebd6f |
loader: "sass-loader",
|
|
Packit Service |
eebd6f |
options: {
|
|
Packit Service |
eebd6f |
sassOptions: {
|
|
Packit Service |
eebd6f |
includePaths: [
|
|
Packit Service |
eebd6f |
// Teach webpack to resolve these references in order to build PF3 scss
|
|
Packit Service |
eebd6f |
path.resolve(nodedir, "font-awesome-sass", "assets", "stylesheets"),
|
|
Packit Service |
eebd6f |
path.resolve(nodedir, "patternfly", "dist", "sass"),
|
|
Packit Service |
eebd6f |
path.resolve(nodedir, "bootstrap-sass", "assets", "stylesheets"),
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
outputStyle: "compressed",
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
],
|
|
Packit Service |
eebd6f |
},
|
|
Packit Service |
eebd6f |
};
|