webpack.config.js 1.6 KB

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