当下流行的打包工具Webpack从入门到熟练系统学习教程(三)webpack5对css/js文件的压缩/兼容性/代码风格处理

上一篇【当下流行的打包工具Webpack从入门到熟练系统学习教程(二)Webpack怎么样打包处理资源
这一节我们来讲webpack5环境下对css,js文件的压缩兼容性处理

1.提取css为单独文件和压缩css文件

1.1 下载插件

npm i mini-css-extract-plugin -D                //提取css为单独文件的
npm i optimize-css-assets-webpack-plugin -D    // 压缩css文件

1.2 使用

html编写

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>

</html>

css文件1

.box1 {
    
    
    width: 200px;
    height: 200px;
    background-color: pink;
}

css文件2

.box2 {
    
    
    width: 100px;
    height: 100px;
    background-color: #ff8500;
}

js文件引入css样式

import '../src/css/a.css'
import '../src/css/b.css'

webpack.config.js文件

const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
    
     resolve } = require('path');
// 引入提取css为单独文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 引入压缩css文件
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

module.exports = {
    
    
    entry: './src/index.js',
    output: {
    
    
        filename: 'js/built.js',
        path: resolve(__dirname, 'build')
    },
    module: {
    
    
        rules: [{
    
    
                test: /\.css$/,
                use: [
                    //创建标签,将样式放入
                    //'style-loader', 

                    // 提取js中的css成单独文件  有了这个标签就不需要上面的将样式引入的‘style-loader’
                    MiniCssExtractPlugin.loader,

                    // 将css文件整合到js文件中
                    'css-loader',

                ]
            },

        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
    
    
            template: './src/index.html'
        }),
        // 使用提取css为单独文件的方法
        new MiniCssExtractPlugin({
    
    
            filename: 'css/built.css' //重命名文件
        }),
        // 使用压缩css文件方法的应用
        new OptimizeCssAssetsWebpackPlugin()
    ],
    mode: 'development'
}

2.css兼容性处理

2.1 下载插件

npm i postcss -D
npm i postcss-loader -D
npm i postcss-preset-env -D

2.2 使用

css文件

.box1 {
    
    
    width: 200px;
    height: 200px;
    background-color: pink;
    display: flex;
    backface-visibility: hidden;
}

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
    
     resolve } = require('path');
// css单独文件生产
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    // css兼容性处理
const PostcssPresetEnv = require('postcss-preset-env')
    // 设置nodejs环境变量
    // process.env.NODE_ENV = 'development';

module.exports = {
    
    
    entry: './src/index.js',
    output: {
    
    
        filename: 'js/built.js',
        path: resolve(__dirname, 'build')
    },
    module: {
    
    
        rules: [{
    
    
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',

                    // css兼容处理  帮postcss找到package.json中的browsersList里面的配置,通过配置加载指定的css兼容样式
                    // 默认loader配置  'postcss-loader'
                    //修改loader的默认设置
                    {
    
    
                        loader: 'postcss-loader',
                        options: {
    
    
                            postcssOptions: {
    
    
                                plugins: [
                                    PostcssPresetEnv()  // 使用 css兼容性处理 
                                ]
                            }
                        }
                    }
                ]
            },

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

webpack.json文件

"browSersList": {
    
    
    "development": [
        "last 1 chrome version",
        "last 1 firefox version",
        "last 1 safari version"
    ],
    "production": [
        ">0.2%",  
        "not dead",  
        "not op_mini alll"  
    ]
}

适用最近一个版本和废除不需要不已经过时的版本

3. js兼容性处理

3.1 下载插件

npm i babel-loader @babel-core @babel/preset-env -D

3.2 使用

有时候浏览器不兼容js代码,比如IE-9、IE-10、IE-11等
这时候需要webpack5的插件来自动帮我们处理这些兼容问题

js代码

// import '@babel/polyfill'

const add = (x, y) => {
    
    
    return x + y;
}
console.log(add(2, 3));

new Promise(function(resolve) {
    
    
    resolve(1)
}).then(function(res) {
    
    
    console.log(res, 'promise')
})

webpack.config.js文件

const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
    
     resolve } = require('path')
module.exports = {
    
    
    entry: './src/index.js',
    output: {
    
    
        filename: 'js/built.js',
        path: resolve(__dirname, 'build'),
    },
    mode: 'development',
    module: {
    
    
        rules: [{
    
    
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: /(node_modules|bower_components)/,
            options: {
    
    
                presets: ['@babel/preset-env']
            }
        }]
    },
    plugins: [
        new HtmlWebpackPlugin({
    
    
            template: './src/index.html'
        }),
    ],
};

3.3 暴力解决兼容性

你会发现IE浏览器不兼容,因为上面的方法是针对一些兼容问题
你也可以使用下面的方法暴力解决,但是缺点是文件太大了

下载插件

npm i @babel/polyfill -D

js引入

import '@babel/polyfill'

const add = (x, y) => {
    
    
    return x + y;
}
console.log(add(2, 3));

new Promise(function(resolve) {
    
    
    resolve(1)
}).then(function(res) {
    
    
    console.log(res, 'promise')
})

3.4 其他方法

下载插件

npm i core-js -D

引入使用到webpack.config.js里面

    module: {
    
    
        rules: [{
    
    

            test: /\.js$/,
            exclude: /node_modules/,
            use: {
    
    
                loader: 'babel-loader',
                options: {
    
    
                    presets: [
                        [
                            '@babel/preset-env',
                            {
    
    
                                useBuiltIns: 'usage',
                                corejs: {
    
    
                                    //core-js的版本
                                    version: 3
                                },
                                //需要兼容的浏览器
                                targets: {
    
    
                                    chrome: '60',
                                    firefox: '60',
                                    ie: '9',
                                    safari: '10',
                                    edge: '17'
                                }
                            }
                        ]
                    ]
                }
            }

        }]
    },

4.压缩js处理

直接把webpack.config.js里面的mode属性换为开生产环境就行了,因为生产环境下会自动压缩js代码

mode: 'production',

5.压缩html

在webpack.config.js里面的HtmlWebpackPlugin对象下添加minify配置项

        new HtmlWebpackPlugin({
    
    
            template: './src/index.html',
            // 压缩html
            minify: {
    
    
                // 移除空格
                collapseWhitespace: true,
                // 移除注释
                removeComments: true
            }
        }),

更多配置参数


> 配置参数
>             collapseWhitespace: true, // 表示移出空格
>             removeEmptyAttributes: true, //移除空属性
>             collapseBooleanAttributes: true, // 移除checked类似的布尔值属性
>             removeAttributeQuotes: true, // 移除属性上的双引号
>             minifyCSS: true, // 压缩内嵌式的css代码(只能基本压缩,不能自动添加前缀)
>             minifyJS: true, //压缩内嵌式的js代码(不能转码)
>             removeStyleLinkTypeAttributes: true, //移除style和link标签上的type属性
>             removeScriptTypeAttributes: true //移除script标签上的默认属性

如果webpack学的难的话推荐先查看gulp教程

更多精彩点击这里

猜你喜欢

转载自blog.csdn.net/weixin_51992868/article/details/124363243