webpack.config.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. const path = require("path");
  2. const WebpackShellPluginNext = require("webpack-shell-plugin-next");
  3. let getJsConfig = (minimize) => {
  4. return {
  5. entry: ["./tool/dropzone.dist.js"],
  6. mode: "production",
  7. module: {
  8. rules: [
  9. {
  10. test: /\.js$/,
  11. exclude: [
  12. /(node_modules|bower_components)/,
  13. /\bcore-js\b/,
  14. /\bwebpack\/buildin\b/,
  15. ],
  16. use: {
  17. loader: "babel-loader",
  18. options: {
  19. babelrc: false,
  20. configFile: path.resolve(__dirname, "babel.config.js"),
  21. compact: false,
  22. cacheDirectory: true,
  23. sourceMaps: false,
  24. },
  25. },
  26. },
  27. {
  28. // Load .html files as string
  29. test: /\.html$/i,
  30. loader: "html-loader",
  31. options: {
  32. sources: false,
  33. },
  34. },
  35. ],
  36. },
  37. optimization: {
  38. minimize: minimize,
  39. },
  40. output: {
  41. libraryTarget: "umd",
  42. path: path.resolve(__dirname, minimize ? "dist/min" : "dist"),
  43. filename: minimize ? "dropzone.min.js" : "dropzone.js",
  44. },
  45. };
  46. };
  47. let getCssConfig = (minimize) => {
  48. return {
  49. entry: ["./src/dropzone.scss", "./src/basic.scss"],
  50. mode: "production",
  51. module: {
  52. rules: [
  53. {
  54. test: /\.scss$/,
  55. use: [
  56. {
  57. loader: "file-loader",
  58. options: {
  59. name: minimize ? "[name].min.css" : "[name].css",
  60. },
  61. },
  62. {
  63. loader: "extract-loader",
  64. },
  65. {
  66. loader: "css-loader",
  67. },
  68. {
  69. loader: "sass-loader",
  70. options: {
  71. sassOptions: {
  72. outputStyle: minimize ? "compressed" : "expanded",
  73. },
  74. },
  75. },
  76. ],
  77. },
  78. ],
  79. },
  80. optimization: {
  81. minimize: false,
  82. },
  83. output: {
  84. path: path.resolve(__dirname, minimize ? "dist/min" : "dist"),
  85. filename: "delete-me",
  86. },
  87. plugins: [
  88. new WebpackShellPluginNext({
  89. onBuildEnd: {
  90. scripts: ["rm -f dist/delete-me && rm -f dist/min/delete-me"],
  91. },
  92. }),
  93. ],
  94. };
  95. };
  96. module.exports = [
  97. getJsConfig(false),
  98. getJsConfig(true),
  99. getCssConfig(false),
  100. getCssConfig(true),
  101. ];