webpack--环境分离--webpack-merge工具的使用

环境分离

环境分离可以分别提供

  1. 给开发时候使用的开发的配置
  2. 提供给真正生产时产生最终用户访问的文件的打包配置

生产环境和开发环境刚好相反,开发环境在本地运行,而生产环境是要产出运行在线上服务器面向最终用户使用的代码,因此两者的构建目标差异很大,比如打包后的文件在生产环境中要尽可能的小,逻辑代码分离,优化静态资源(压缩图片),去除错误追踪 source map文件等, 也不需要提供 webpack-dev-server 开发服务器。

因此开发环境和生产环境不要共用一份webpack配置文件,需要分别指定

但是两个环境还是有很多配置可以共用的,比如entry、output、module等,因此可以把公共部分的配置抽离出来放到一个独立的文件然后进行合并,我们可以使用webpack-merge工具来进行合并。

注意:entry、output、module这些配置在我们当前示例可以通用,但未必适合所有项目。

安装依赖

npm install --save-dev webpack-merge

开始拆分webpack.config.js文件,拆分后该文件可废弃。https://blog.csdn.net/NI_chunz/article/details/106850682

新建config文件夹:
- webpack-demo
- config // 存放配置文件的文件夹
- webpack.base.js // 公共的配置
- webpack.dev.js // 开发环境的配置
- webpack.prod.js // 生成环境的配置

	- // 其他文件

配置文件

config/webpack.base.js

  const path = require("path");
    const ExtractTextPlugin = require("extract-text-webpack-plugin");
    const HtmlWebpackPlugin = require("html-webpack-plugin");
    const { CleanWebpackPlugin } = require('clean-webpack-plugin');
    
    module.exports = {
        // 入口
        entry: "./src/index.js",
        
        // 输出
        output: {
            filename: "bundle.js",
            path: path.resolve(__dirname, "../dist")  // 注意此处输出目录是父级文件夹
        },
        
        // 模块加载器
        module: {
            rules: [
                {
                    test: /\.css$/,
                    use: ExtractTextPlugin.extract({
                        fallback: "style-loader",
                        use: ["css-loader"]
                    })
                },
                {
                    test: /\.less$/,
                    use: ExtractTextPlugin.extract({
                        fallback: "style-loader",
                        use: ["css-loader", "less-loader"]
                    })
                },
                {
                    test: /\.(png|svg|jpg|gif)$/,
                    use: [
                        {
                            loader: "file-loader", 
                            options: {
                                publicPath: "./images/", 
                                outputPath: "images"
                            }
                        }
                    ]
                }
            ]
        },
    
        plugins: [
            // 提取css样式到单独文件
            new ExtractTextPlugin("style/style2.css"),
    		
            // 每次构建前清除dist目录
            new CleanWebpackPlugin(),
    		
            // 自动生成index.html到dist
            new HtmlWebpackPlugin({
                template: "public/index.html"
            }),
        ]
    }

webpack.dev.js

   const merge = require('webpack-merge');
    const base = require('./webpack.base.js');
    
    module.exports = merge(base, {
        mode: "development",
        
        // 生成map映射文件
        devtool: "source-map",
    	
        // 开发服务器配置
        devServer: {
            port: 8000 // 默认端口是8080
       },
    })
    
webpack.prod.js

    const merge = require('webpack-merge');
    const base = require('./webpack.base.js');
    
    module.exports = merge(base, {
        mode: "production"
    })

注意:拆分完webpack.config.js后可以把该文件删除了。

修改scripts启动命令,注意指定配置文件路径

package.json

 {
        // 其他配置
        
        "scripts": {
        	"build": "webpack --config ./config/webpack.prod.js",
        	"dev": "webpack-dev-server --config ./config/webpack.dev.js --open"
        },
        
        // 其他配置
    }

OK!以后开发的话就使用npm run dev命令,需要打包上线就运行npm run build,把dist目录丢给运维的同事部署即可(当然现在的项目工程里都有自动化部署了)。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值