【webpack4】第四部分 生产环境基本配置

【webpack4】第四部分 生产环境基本配置



4. 生产环境基本配置

4.1 提取css为单独文件

npm install --save-dev mini-css-extract-plugin 下载插件

在这里插入图片描述

webpack.config.js

const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
//引入插件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
        rules:[
            {
                test:/\.css$/,
                use:[
                    // 创建 style 标签,将js样式放入head
                    // 'style-loader',
                    // MiniCssExtractPlugin.loader 取代 style-loader
                    // 作用:提取 js 中的 css 成单独文件
                    MiniCssExtractPlugin.loader,
                    // 将 css 文件整合到 js 文件中
                    'css-loader'
                ]
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:'./src/index.html'
        }),
      
        new MiniCssExtractPlugin({
            //对输出的css进行重命名
            filename:'css/built.css'
        })
    ],
    mode:'development'
}

4.2 css兼容性问题

npm install --save-dev postcss-loader postcss-preset-env 需要下载的插件和loader

须知:

  1. css兼容性处理:使用postcss
    需要下载:postcss-loader postcss-preset-env
    loader的默认使用:

    默认使用是没有办法进行配置的
    默认使用的形式:xxx-loader

    配置package.json中去配置,使得postcss能够找到
    配置如下:

    "browserslist":{
        // 开发环境
    			"development":[
    				//表示兼容最近的xx浏览器版本
    				"last 1 chrome version",
    				"last 1 firefox version"
    			],
    
    			//生产环境
    			"production":[
    				// 兼容超过99%浏览器
    				">0.1%",
    				// 死的浏览器
    				"not dead",
    				"not op_mini all"
    			]
    	
    

webpack.config.js

const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

 // 设置 nodejs 环境变量(默认是看生产环境)
//  process.env.NODE_ENV = 'development';

module.exports = {
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
        rules:[
            {
                test:/\.css$/,
                use:[
                    //提取css
                    MiniCssExtractPlugin.loader,
                    // 将 css 文件整合到 js 文件中
                    'css-loader',
                   //修改loader的默认配置需要写成对象的形式
                    {
                        //设置加载器
                       loader:'postcss-loader',
                       //配置options
                       options:{
                           postcssOptions:{
                               //插件
                               plugins:[
                                   [
                                   	//指定环境
                                   	"postcss-preset-env",
                                   	{
                                     //兼容浏览器最新的两个版本
                                       browsers:'last 2 versions'
                                   	}
                                   ]
                               ]
                           }
                       }
                    }
                ]
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:'./src/index.html'
        }),
        new MiniCssExtractPlugin({
            //重命名文件
            filename:'css/built.css'
        })
    ],
    mode:'development'
}

4.3 压缩css

npm install --save-dev optimize-css-assets-webpack-plugin 需要下载的包

webpack.config.js

const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

//导入压缩css的插件
const  OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

 // 设置 nodejs 环境变量(默认是看生产环境)
//  process.env.NODE_ENV = 'development';

module.exports = {
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
     module:{
        rules:[
            {
                test:/\.css$/,
                use:[
                    //提取css
                    MiniCssExtractPlugin.loader,
                    // 将 css 文件整合到 js 文件中
                    'css-loader',
                   //修改loader的默认配置需要写成对象的形式
                    {
                        //设置加载器
                       loader:'postcss-loader',
                       //配置options
                       options:{
                           postcssOptions:{
                               //插件
                               plugins:[
                                   [
                                   		//指定环境
                                   "postcss-preset-env",
                                   {
                                     //兼容浏览器最新的两个版本
                                       browsers:'last 2 versions'
                                   }
                                   ]
                               ]
                           }
                       }
                    }
                ]
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:'./src/index.html'
        }),
        new MiniCssExtractPlugin({
            //重命名文件
            filename:'css/built.css'
        }),
        //压缩css
        new OptimizeCssAssetsWebpackPlugin()
    ],
    mode:'development'
}

4.4 js语法检查eslint

需要下载四个安装包:

npm install --save-dev eslint-loader

npm install --save-dev eslint

npm install --save-dev eslint-config-airbnb-base

npm install --save-dev eslint-plugin-import

一起下载用下面的代码:

npm install --save-dev eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import

webpack.config.js

const {resolve} = require('path')
const HtmlWebpackPlugin = require("html-webpack-plugin")
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
        rules:[
            {
                test:/\.js$/,
                // 注意:只检查自己写的源代码,第三方的库是不用检查的设置检查规则
                // 语法检查: eslint-loader eslint
                // 除去别人的包,不然会用问题
                exclude:/node_module/, //一定要记得写
                loader:'eslint-loader',
                options:{
                    // 自动修复eslint的错误,修正格式
                    fix:true
                }
                
            },
            {
                test:/\.css$/,
                use:[MiniCssExtractPlugin.loader,'css-loader']
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            tempalte:"./src/index.html"
        }),
        new MiniCssExtractPlugin({
            filename:'css/built.css'
        })
    ],
    mode:'development'
}

4.5 eslint兼容性问题

需要下载的包:

npm install --save-dev babel-loader

npm install --save-dev @babel/core

npm install --save-dev @babel/preset-env

npm install --save-dev @babel/polyfill

npm install --save-dev core-js

  1. 基本js兼容性处理 --> ·@babel/preset-env,使用它必须要下载babel-loader@babel/core

    问题:只能转换基本的语法,例如promise就不能转化

  2. 全部的js兼容性处理 -->@babel/polyfill(不推荐使用)

    问题:我们只需要解决部分兼容性问题但是所有的兼容性代码全部引入,导致体积太大

  3. 需要做兼容性处理的就做:按需加载 --> core-js(推荐使用)

webpack.config.js

const {resolve} = require('path')
const HtmlWebpackPlugin = require("html-webpack-plugin")
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
        rules:[
            {
                test:/\.js$/,
                // 注意:只检查自己写的源代码,第三方的库是不用检查的设置检查规则
                // 语法检查: eslint-loader eslint
                // 除去别人的包,不然会用问题
                exclude:/node_module/, //一定要记得写
                loader:'eslint-loader',
                options:{
                    // 自动修复eslint的错误,修正格式
                    fix:true
                }
                
            },
            {
                test:/\.css$/,
                use:[MiniCssExtractPlugin.loader,'css-loader']
            },
            {
                test:/\.js$/,
                exclude:/node_module/,
                loader:'babel-loader',
                options:{
                    // 预设:指示 babel 做怎么样的兼容性处理
                    presets:[
                        [
                            '@babel/preset-env',
                            {
                                //按需加载
                                useBuiltIns:'usage',
                                //指定core-js版本
                                corejs:{
                                    verson:3
                                },
                                // 指定兼容性做到哪个版本浏览器
                                targets: { 
                                    chrome: '60',
                                    firefox: '60',
                                    ie: '9',
                                    safari: '10',
                                    edge: '17'
                                }
                            }

                        ]
                    ]
                }
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            tempalte:"./src/index.html"
        }),
        new MiniCssExtractPlugin({
            filename:'css/built.css'
        })
    ],
    mode:'development'
}

4.6 压缩js和html代码

  1. 压缩js代码:只需要开启生成模式就会自动压缩
  2. 压缩html代码:
const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    entry:'./src/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
   plugins:[
       new HtmlWebpackPlugin({
           tempalte:'./src/index.html',
        //    这里多个配置,就可以压缩html代码
        minify:{
            //移除空格
            collapseWhitespace:true,
            //移除注释
            removeComments:true
        }
       })
   ],
    // 开启生产模式就可以压缩js代码    
   mode:'production'
}

4.7 生产环境的基本配置

const {resolve}  = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
const HtmlWebpackPlugin  = require('html-webpack-plugin')

module.exports = {
    //入口文件
    entry:"./src/js/index.js",
    // 输出地址
    output:{
        filename:"js/built.js",
        path:resolve(__dirname,'build')
    },
    //loader
    module:{
        rules:[
            // 打包css
               {
                test:/\.css$/,
                use:[
                    //提取css
                    MiniCssExtractPlugin.loader,
                    // 将 css 文件整合到 js 文件中
                    'css-loader',
                   //修改loader的默认配置需要写成对象的形式
                    {
                        //设置加载器
                       loader:'postcss-loader',
                       //配置options
                       options:{
                           postcssOptions:{
                               //插件
                               plugins:[
                                  [
                                  	//指定环境
                                   "postcss-preset-env",
                                   {
                                       browsers:'last 2 versions'
                                   }
                                  ]
                               ]
                           }
                       }
                    }
                ]
            },
            {
                //打包less
                test:/\.less$/,
                use:[
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    //修改loader的默认配置需要写成对象的形式
                    {
                        //设置加载器
                       loader:'postcss-loader',
                       //配置options
                       options:{
                           postcssOptions:{
                               //插件
                               plugins:[
                                   [
                                   //指定环境
                                   "postcss-preset-env",
                                   {
                                       browsers:'last 2 versions'
                                   }
                                   ]
                               ]
                           }
                       }
                    },
                    'less-loader'
                ]
            },
            {
                //eslint
                test:/\.js$/,
                exclude:/node_module/,
                loader:'eslint-loader',
                // 优先执行
                enforce: 'pre',
                options:{
                    fix:true
                }
            },
            {
                test:/\.js$/,
                exclude:/node_module/,
                loader:'babel-loader',
                options:{
                    // 预设:指示 babel 做怎么样的兼容性处理
                    presets:[
                        [
                            '@babel/preset-env',
                            {
                                //按需加载
                                useBuiltIns:'usage',
                                //指定core-js版本
                                corejs:{
                                    verson:2
                                },
                                // 指定兼容性做到哪个版本浏览器
                                targets: { 
                                    chrome: '60',
                                    firefox: '60',
                                    ie: '9',
                                    safari: '10',
                                    edge: '17'
                                }
                            }

                        ]
                    ]
                }
            },
            {
                //打包图片
                test:/\.(jpg|png|gif|webp)$/,
                loader:'url-loader',
                options:{
                    limit: 8*1024,
                    name:'[hash:10].[ext]',
                    outputPath:'imgs',   
                    esModule:false             
                }
            },
            //处理html下的图片
            {
                test:/\.html$/,
                loader:'html-loader',
                options:{
                    esModule:false
                }
            },
            //打包其他文件
            {
                exclude:/\.(js|css|less|html|jpg|png|gif)$/,
                loader:'file-loader',
                options:{
                    outputPath:'media'
                }
            }
        ]
    },
    plugins:[
        //提取css文件
        new MiniCssExtractPlugin({
            filename:"css/built.css"
        }),
        //压缩css
        new OptimizeCssAssetsWebpackPlugin(),
        //打包html
        new HtmlWebpackPlugin({
            template:'./src/index.html',
            //压缩html
            minify:{
                collapseWhitespace:true,
                removeComments:true
            }
        })
    ],
    // 开启生产模式就自动压缩js
    mode:'production'
}


总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值