webpack.config.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { dirname, join } from "path";
  2. import { exec } from "child_process";
  3. import { fileURLToPath } from "url";
  4. import dotenv from "dotenv";
  5. import MiniCssExtractPlugin from "mini-css-extract-plugin";
  6. import CssMinimizerPlugin from "css-minimizer-webpack-plugin";
  7. dotenv.config();
  8. const mode = ["development", "production"].includes(process.env.NODE_ENV) ? process.env.NODE_ENV : "development";
  9. const outFileSuffix = process.env.OUTFILE_SUFFIX ?? "";
  10. export default {
  11. entry: "./src/BetterYTM.user.ts",
  12. output: {
  13. filename: `BetterYTM${outFileSuffix}.user.js`,
  14. path: join(dirname(fileURLToPath(import.meta.url)), "/dist"),
  15. clean: true,
  16. module: true,
  17. },
  18. experiments: {
  19. // userscripts are automatically wrapped in an IIFE by the browser extension, so this can be enabled
  20. outputModule: true,
  21. },
  22. mode,
  23. resolve: {
  24. extensions: [
  25. ".ts",
  26. ".js",
  27. ".css",
  28. ".md",
  29. ],
  30. },
  31. module: {
  32. rules: [
  33. {
  34. test: /\.tsx?$/,
  35. use: "ts-loader",
  36. exclude: /node_modules/,
  37. },
  38. {
  39. test: /\.html$/i,
  40. loader: "html-loader",
  41. },
  42. {
  43. test: /\.md$/,
  44. use: [
  45. {
  46. loader: "html-loader",
  47. },
  48. {
  49. loader: "markdown-loader",
  50. },
  51. ],
  52. },
  53. {
  54. test: /.css$/,
  55. use: [MiniCssExtractPlugin.loader, "css-loader" /*, "sass-loader"*/],
  56. },
  57. ],
  58. },
  59. optimization: {
  60. minimizer: [
  61. `...`,
  62. new CssMinimizerPlugin(),
  63. ],
  64. },
  65. plugins: [
  66. new MiniCssExtractPlugin(),
  67. {
  68. apply: (compiler) => {
  69. compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => {
  70. exec("npm run post-build", (_err, stdout, stderr) => {
  71. stdout && process.stdout.write(stdout);
  72. stderr && process.stderr.write(stderr);
  73. });
  74. });
  75. },
  76. },
  77. ],
  78. devtool: "source-map",
  79. };