• webpack高级概念,环境变量使用(系列十一)


    webapck配置目录

    开发环境webpack.dev.js

    const webpack = require('webpack');
    
    const devConfig = {
        mode: 'development',
        devtool: 'cheap-module-eval-source-map',
        devServer: {
            contentBase: './dist',
            open: true,
            port: 8080,
            hot: true
        },
        module: {
            rules: [{
                test: /.scss$/,
                use: [
                    'style-loader', 
                    {
                        loader: 'css-loader',
                        options: {
                            importLoaders: 2
                        }
                    },
                    'sass-loader',
                    'postcss-loader'
                ]
            }, {
                test: /.css$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'postcss-loader'
                ]
            }]
        },
        plugins: [
            new webpack.HotModuleReplacementPlugin()
        ],
        output: {
            filename: '[name].js',
            chunkFilename: '[name].js',
        }
    }
    
    module.exports = devConfig;

    生产环境,webpack.prod.js

    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
    
    const prodConfig = {
        mode: 'production',
        devtool: 'cheap-module-source-map',
        module: {
            rules:[{
                test: /.scss$/,
                use: [
                    MiniCssExtractPlugin.loader, 
                    {
                        loader: 'css-loader',
                        options: {
                            importLoaders: 2
                        }
                    },
                    'sass-loader',
                    'postcss-loader'
                ]
            }, {
                test: /.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'postcss-loader'
                ]
            }]
        },
        optimization: {
            minimizer: [new OptimizeCSSAssetsPlugin({})]
        },
        plugins: [
            new MiniCssExtractPlugin({
                filename: '[name].css',
                chunkFilename: '[name].chunk.css'
            })
        ],
        output: {
            filename: '[name].[contenthash].js',
            chunkFilename: '[name].[contenthash].js'
        }
    }
    
    module.exports = prodConfig;

    公共的webpack配置,webpack.common.js

    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const webpack = require('webpack');
    const merge = require('webpack-merge');
    const devConfig = require('./webpack.dev.js');
    const prodConfig = require('./webpack.prod.js');
    const commonConfig = {
        entry: {
            main: './src/index.js',
        },
        module: {
            rules: [{ 
                test: /.js$/, 
                exclude: /node_modules/,
                use: [{
                    loader: 'babel-loader'
                }, {
                    loader: 'imports-loader?this=>window'
                }]
            }, {
                test: /.(jpg|png|gif)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        name: '[name]_[hash].[ext]',
                        outputPath: 'images/',
                        limit: 10240
                    }
                } 
            }, {
                test: /.(eot|ttf|svg)$/,
                use: {
                    loader: 'file-loader'
                } 
            }]
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: 'src/index.html'
            }), 
            new CleanWebpackPlugin(['dist'], {
                root: path.resolve(__dirname, '../')
            }),
            new webpack.ProvidePlugin({
                $: 'jquery',
                _join: ['lodash', 'join']
            }),
        ],
        optimization: {
            runtimeChunk: {
                name: 'runtime'
            },
            usedExports: true,
            splitChunks: {
          chunks: 'all',
          cacheGroups: {
              vendors: {
                  test: /[\/]node_modules[\/]/,
                  priority: -10,
                  name: 'vendors',
              }
          }
        }
        },
        performance: false,
        output: {
            path: path.resolve(__dirname, '../dist')
        }
    }
    
    module.exports = (env) => {
        if(env && env.production) {
        //合并生产的配置
    return merge(commonConfig, prodConfig); }else { return merge(commonConfig, devConfig); } }

    注,在公共的webpack.common.js中引入开发和生产的环境配置,在package.json中配置命令变量

      "scripts": {
        "dev-build": "webpack --config ./build/webpack.common.js",
        "dev": "webpack-dev-server --config ./build/webpack.common.js",
        "build": "webpack --env.production --config ./build/webpack.common.js"
      },

    build命令,--env.production这个变量传到给webpack.common.js中的env参数,然后根据这个判断是否打包生产环境的配置还是打包开发环境的配置

    此时运行, npm  run dev 或者npm run build 都是正常的。一般不采用这种方式配置

    以上的配置的效果和这个文章配置效果一样的;https://www.cnblogs.com/fsg6/p/14490243.html

  • 相关阅读:
    一个母亲一生撒的八个谎言(含泪推荐)!
    穷人必须做的四件大事
    八种人不太可能驰骋职场,有你吗?
    是谁让我如此忧伤?
    拒绝平淡:我用十年的时间名满天下
    高性能利器!华为云MRS ClickHouse重磅推出!
    MySQL 连接为什么挂死了?
    解读登录双因子认证(MFA)特性背后的TOTP原理
    云图说|初识数据仓库服务:云时代的数据分析助手
    号外!5G+X联创营华为云官网上线,5G 创业春天来了!
  • 原文地址:https://www.cnblogs.com/fsg6/p/14493065.html
Copyright © 2020-2023  润新知