webpack.config.js 1.7 KB

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