webpack.config.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. export default {
  7. entry: "./src/BetterYTM.user.ts",
  8. output: {
  9. filename: "BetterYTM.user.js",
  10. path: join(dirname(fileURLToPath(import.meta.url)), "/dist"),
  11. clean: true,
  12. },
  13. mode: "production",
  14. resolve: {
  15. extensions: [
  16. ".ts",
  17. ".js",
  18. ".css",
  19. ".md",
  20. ],
  21. },
  22. module: {
  23. rules: [
  24. {
  25. test: /\.tsx?$/,
  26. use: "ts-loader",
  27. exclude: /node_modules/,
  28. },
  29. {
  30. test: /\.html$/i,
  31. loader: "html-loader",
  32. },
  33. {
  34. test: /\.md$/,
  35. use: [
  36. {
  37. loader: "html-loader",
  38. },
  39. {
  40. loader: "markdown-loader",
  41. },
  42. ],
  43. },
  44. {
  45. test: /.css$/,
  46. use: [MiniCssExtractPlugin.loader, "css-loader" /*, "sass-loader"*/],
  47. },
  48. ],
  49. },
  50. optimization: {
  51. minimizer: [
  52. `...`,
  53. new CssMinimizerPlugin(),
  54. ],
  55. },
  56. plugins: [
  57. new MiniCssExtractPlugin(),
  58. {
  59. apply: (compiler) => {
  60. compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => {
  61. exec("npm run post-build", (_err, stdout, stderr) => {
  62. stdout && process.stdout.write(stdout);
  63. stderr && process.stderr.write(stderr);
  64. });
  65. });
  66. },
  67. },
  68. ],
  69. devtool: "source-map",
  70. };