webpack.prod.config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. const path = require("path");
  2. const merge = require("webpack-merge");
  3. const baseConfig = require("./webpack.base.js"); // 引用公共的配置
  4. const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 用于将组件的css打包成单独的文件输出到`lib`目录中
  5. const webpack = require("webpack");
  6. const prodConfig = {
  7. mode: "production", // 开发模式
  8. entry: path.join(__dirname, "../src/entry.jsx"),
  9. output: {
  10. path: path.join(__dirname, "../lib/"),
  11. filename: "index.js",
  12. libraryTarget: "umd", // 采用通用模块定义
  13. libraryExport: "default", // 兼容 ES6 的模块系统、CommonJS 和 AMD 模块规范
  14. },
  15. module: {
  16. rules: [
  17. {
  18. test: /\.css$/,
  19. loader: [MiniCssExtractPlugin.loader, "css-loader?modules"],
  20. },
  21. {
  22. test: /\.min\.css$/,
  23. loader: ["style-loader", "css-loader"],
  24. },
  25. {
  26. test: /(\.module)?.(sass|scss)$/,
  27. use: [
  28. "style-loader",
  29. {
  30. loader: "css-loader",
  31. options: {
  32. modules: {
  33. localIdentName: "[path][name]__[local]--[hash:base64:5]",
  34. },
  35. sourceMap: true,
  36. },
  37. },
  38. "sass-loader",
  39. ],
  40. },
  41. // {
  42. // test: /\.less$/,
  43. // use: [
  44. // 'style-loader',
  45. // {
  46. // loader: 'css-loader',
  47. // options: {
  48. // modules: {
  49. // localIdentName: '[path][name]__[local]--[hash:base64:5]',
  50. // },
  51. // sourceMap: true,
  52. // },
  53. // },
  54. // 'less-loader',
  55. // ],
  56. // },
  57. {
  58. test: /\.less$/,
  59. use: [
  60. "style-loader",
  61. {
  62. loader: "css-loader",
  63. options: {
  64. modules: true, // 确保启用了 CSS Modules
  65. },
  66. },
  67. "less-loader",
  68. ],
  69. },
  70. {
  71. test: /\.(png|svg|jpg|gif)$/,
  72. use: ["file-loader"],
  73. },
  74. ],
  75. },
  76. plugins: [
  77. new MiniCssExtractPlugin({
  78. filename: "main.min.css", // 提取后的css的文件名
  79. }),
  80. new webpack.ProvidePlugin({
  81. React: "react",
  82. }),
  83. ],
  84. externals: {
  85. // 定义外部依赖,避免把react和react-dom打包进去
  86. react: {
  87. root: "React",
  88. commonjs2: "react",
  89. commonjs: "react",
  90. amd: "react",
  91. },
  92. "react-dom": {
  93. root: "ReactDOM",
  94. commonjs2: "react-dom",
  95. commonjs: "react-dom",
  96. amd: "react-dom",
  97. },
  98. },
  99. };
  100. module.exports = merge(prodConfig, baseConfig); // 将baseConfig和prodConfig合并为一个配置