配置文件根据环境不同导出不同配置

webpack配置文件支持导出一个函数,在这个函数当中返回我们所需要的配置对象,这个函数可以接收到两个参数。
第一个参数env,也就是我们通过cli传递的一个环境名参数
第二个参数argv,是指我们运行过程中cli传递的所有参数。

  1. module.exports = (env, argv) => {
  2. // 基础配置
  3. const config = {
  4. mode:"none",
  5. ...
  6. }
  7. if(env === "production"){
  8. console.log('生产环境');
  9. config.mode = 'production'
  10. config.devtool = false // 禁用sourcemap
  11. config.plugins = [
  12. ...config.plugins,
  13. new CleanWebpackPlugin(),
  14. new CopyWebpackPlugin({
  15. patterns: [
  16. {
  17. from:"images",
  18. to:"images"
  19. }
  20. ]
  21. }),
  22. ]
  23. }
  24. return config;
  25. }

一个环境对应一个配置文件

采用多配置文件的方式,根据自己的需要,指定一个配置文件来执行打包。
例如有三个配置文件,webpack.common.js、webpack.dev.js、webpack.prod.js。webpack.common.js中写一些公共的配置,webpack.dev.js写开发环境的配置,webpack.prod.js写生产环境的配置。

  1. // webpack.common.js
  2. const path = require("path")
  3. const HtmlWebpackPlugin = require("html-webpack-plugin")
  4. module.exports = {
  5. entry: "./src/index.js", // 指定打包入口文件的路径,注意,如果这里的路径是相对路径, ./是不能省略的
  6. output: { // 通过output属性设置输出文件位置,output的值要求是一个对象
  7. filename: "bundle.js", // 通过filename指定输出文件名称
  8. path: path.join(__dirname, "dist"), // 通过path属性指定输出文件的目录,需要输入一个绝对路径
  9. },
  10. module: {...},
  11. plugins: [
  12. new HtmlWebpackPlugin(...)
  13. ]
  14. }
  1. // webpack.prod.js
  2. // 引入webpack.common.js内容
  3. const common = require("./webpack.common")
  4. // 引入生产环境需要的插件
  5. const CopyWebpackPlugin = require("copy-webpack-plugin")
  6. const { CleanWebpackPlugin } = require("clean-webpack-plugin")
  7. // 使用merge实现对配置的合并操作,因为Object.assign方法会将前面的同名属性直接覆盖,而我们只是希望添加一些插件,所以我们需要借助于webpack-merge模块来满足我们合并plugins的需求
  8. const { merge } = require("webpack-merge")
  9. module.exports = merge(common, {
  10. mode:"production",
  11. devtool: false,
  12. plugins:[
  13. new CleanWebpackPlugin(),
  14. new CopyWebpackPlugin({
  15. patterns: [
  16. {
  17. from:"images",
  18. to:"images"
  19. }
  20. ]
  21. })
  22. ]
  23. })