有些时候,我们需要针对生产环境和开发环境分别书写webpack配置文件,为了更好的适应这种要求,webpack允许配置可以是一个对象,还可以是一个函数

    1. module.exports=env=>{
    2. return {
    3. //配置内容
    4. }
    5. }

    在开始构建时,webpack如果发现配置是一个函数,就会调用该函数,将函数的返回值作为配置内容,因此,开发者可以根据不同的环境返回不同的对象

    在调用webpack函数的时候,webpack会向函数传入一个参数env,该参数的值来自于webpack命令中给env指定的值,例如

    1. npx webpack --env abc # env:"abc"
    2. npx webpack --env.abc # env:{abc:true}
    3. npx webpack --env=1 #env:{abc:1}
    4. npx webpack --env.abc=1 --env.bcd=2 # env:{abc:1,bcd:2}

    这样一来我们就可在命令中指定环境,在代码中判断,根据华宁返回不同的配置结果

    ??? 怎么根据不同的配置,打包不同的环境,怎么区分相同配置和通用配置

    通过命令行攒底参数,标准的配置方案

    paackage.json 脚本配置

    1. "start": "rm -rf dist && webpack --config webpack.func.config.js --env=pro",

    webpack.func.config.js

    1. const basicConfig = require('./webpack.basic.config');
    2. const devConfig = require('./webpack.dev.config');
    3. const proConfig = require('./webpack.pro.config');
    4. module.exports = function (env) {
    5. if (env === 'pro') { // package.json中命令行传进来的参数
    6. return {
    7. ...basicConfig,
    8. ...proConfig,
    9. }
    10. } else {
    11. return {
    12. ...basicConfig,
    13. ...devConfig,
    14. }
    15. }
    16. }

    webpack.basic.config.js 此配置文件的配置的是开发环境和生产环境公共的配置,此处只是一个demo

    1. const path = require('path');
    2. const MyPlugin = require('./plugins/myPlugin');
    3. const FileListPlugin = require('./plugins/FileListPlugin')
    4. module.exports = {
    5. entry: {
    6. index: path.join(__dirname, 'src', 'index'),
    7. main: path.join(__dirname, 'src', 'main'),
    8. c: [path.join(__dirname, 'src', 'c'), path.join(__dirname, 'src', 'd')],
    9. },
    10. output: {
    11. path: path.join(__dirname, 'dist'),
    12. // publicPath: '/dist/',
    13. // filename: "[name].[chunkhash:5].js",//合并的js规则
    14. filename: "[name].js",
    15. chunkFilename: '[name].js'
    16. },
    17. // loaders
    18. module: {
    19. rules: [
    20. {
    21. test: /index\.js/,
    22. use: [
    23. {
    24. loader: './loaders/var',
    25. options: {
    26. changeVar: '变量'
    27. }
    28. }
    29. ]
    30. }, // 规则1 处理变量
    31. {
    32. test: /\.js/,
    33. use: [
    34. {
    35. loader: './loaders/equal'
    36. }
    37. ]
    38. } // 规则2 处理等号
    39. ]
    40. },
    41. // plugin
    42. plugins: [
    43. new MyPlugin(),
    44. new FileListPlugin('文件列表5.txt')
    45. ],
    46. }

    webpack.dev.config.js

    1. module.exports = {
    2. mode: 'development',
    3. devtool: 'source-map',
    4. }

    webpack.pro.config

    1. module.exports = {
    2. mode: "production"
    3. }