Browse Source

feat: silent mode for webpack

Sven 1 year ago
parent
commit
733e940b5a
2 changed files with 78 additions and 63 deletions
  1. 6 0
      .eslintrc.cjs
  2. 72 63
      webpack.config.js

+ 6 - 0
.eslintrc.cjs

@@ -46,6 +46,12 @@ module.exports = {
       files: ["**.js"],
       rules: {
         "@typescript-eslint/no-var-requires": "off",
+        "quotes": [ "error", "double" ],
+        "semi": [ "error", "always" ],
+        "eol-last": [ "error", "always" ],
+        "no-async-promise-executor": "off",
+        "indent": ["error", 2, { "ignoredNodes": ["VariableDeclaration[declarations.length=0]"] }],
+        "comma-dangle": ["error", "only-multiline"],
       },
     },
   ],

+ 72 - 63
webpack.config.js

@@ -8,6 +8,9 @@ import CssMinimizerPlugin from "css-minimizer-webpack-plugin";
 
 dotenv.config();
 
+/** Set to true to suppress all webpack output but errors */
+const silent = true;
+
 const defaultMode = ["development", "production"].includes(process.env.NODE_ENV) ? String(process.env.NODE_ENV) : "development";
 const outFileSuffix = process.env.OUTFILE_SUFFIX ?? "";
 
@@ -20,72 +23,78 @@ const output = {
 };
 
 /** @param {import("./src/types").WebpackEnv} env */
-const getConfig = (env) => ({
-  entry: "./src/index.ts",
-  output,
-  experiments: {
-    // userscripts are automatically wrapped in an IIFE by the browser extension,
-    // also all modern browsers support ESM so this can safely be enabled
-    outputModule: true,
-  },
-  mode: env.mode ?? defaultMode,
-  resolve: {
-    extensions: [
-      ".ts",
-      ".js",
-      ".css",
-      ".md",
-    ],
-  },
-  module: {
-    rules: [
-      {
-        test: /\.tsx?$/,
-        use: "ts-loader",
-        exclude: /node_modules/,
-      },
-      {
-        test: /\.html$/i,
-        loader: "html-loader",
-      },
-      {
-        test: /\.md$/,
-        use: [
-          {
-            loader: "html-loader",
-          },
-          {
-            loader: "markdown-loader",
-          },
-        ],
-      },
+const getConfig = (env) => {
+  /** @type {import("webpack").Configuration} */
+  const cfg = {
+    entry: "./src/index.ts",
+    output,
+    experiments: {
+      // userscripts are automatically wrapped in an IIFE by the browser extension,
+      // also all modern browsers support ESM so this can safely be enabled:
+      outputModule: true,
+    },
+    mode: env.mode ?? defaultMode,
+    resolve: {
+      extensions: [
+        ".ts",
+        ".js",
+        ".css",
+        ".md",
+      ],
+    },
+    module: {
+      rules: [
+        {
+          test: /\.tsx?$/,
+          use: "ts-loader",
+          exclude: /node_modules/,
+        },
+        {
+          test: /\.html$/i,
+          loader: "html-loader",
+        },
+        {
+          test: /\.md$/,
+          use: [
+            {
+              loader: "html-loader",
+            },
+            {
+              loader: "markdown-loader",
+            },
+          ],
+        },
+        {
+          test: /.css$/,
+          use: [MiniCssExtractPlugin.loader, "css-loader" /*, "sass-loader"*/],
+        },
+      ],
+    },
+    optimization: {
+      minimizer: [
+        `...`,
+        new CssMinimizerPlugin(),
+      ],
+    },
+    plugins: [
+      new MiniCssExtractPlugin(),
       {
-        test: /.css$/,
-        use: [MiniCssExtractPlugin.loader, "css-loader" /*, "sass-loader"*/],
-      },
-    ],
-  },
-  optimization: {
-    minimizer: [
-      `...`,
-      new CssMinimizerPlugin(),
-    ],
-  },
-  plugins: [
-    new MiniCssExtractPlugin(),
-    {
-      apply: (compiler) => {
-        compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => {
-          exec(`npm run post-build -- mode=${env.mode ?? defaultMode}`, (_err, stdout, stderr) => {
-            stdout && process.stdout.write(stdout);
-            stderr && process.stderr.write(stderr);
+        apply: (compiler) => {
+          console.log("Running post-build script...\n");
+          compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => {
+            exec(`npm run --silent post-build -- mode=${env.mode ?? defaultMode}`, (_err, stdout, stderr) => {
+              stdout && process.stdout.write(stdout);
+              stderr && process.stderr.write(stderr);
+            });
           });
-        });
+        },
       },
-    },
-  ],
-  devtool: "source-map",
-});
+    ],
+    devtool: "source-map",
+    ...(silent ? { stats: "errors-only", } : {}),
+  };
+  return cfg;
+};
 
 export default getConfig;
 export { output };