Webpack中压缩代码文件

Posted aiguangyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Webpack中压缩代码文件相关的知识,希望对你有一定的参考价值。

在开发完成后,代码正式上线都需要对代码进行压缩,这样代码资源会变的更小,访问速度也会变的更快。

1. 压缩JS文件

在Webpack 4.x以上版本以上内置了uglifyjs-webpack-plugin 插件,会对JS文件自动压缩,不需要做其它的任何操作。也可以手动安装这个插件,设置一些另外的参数,比如开启并行压缩,加快打包的速度。

2. 压缩CSS文件

由于 css-loader 在1.0版本以后,去掉了设置参数,所以在打包的时候是没有办法通过设置参数的方式去压缩。

1.安装插件

npm i optimize-css-assets-webpack-plugin cssnano -D

由于optimize-css-assets-webpack-plugin插件配置时依赖cssnano预处理器,所以需要一起安装。

2. 配置Webpack

'use strict';

const path = require('path');
// npm i mini-css-extract-plugin -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// npm i optimize-css-assets-webpack-plugin cssnano -D
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');


module.exports = 
    entry: 
        index: './src/index.js',
        search: './src/search.js'
    ,
    output: 
        path: path.join(__dirname, 'dist'),
        filename: '[name]_[chunkhash:8].js'
    ,
    mode: 'production',
    module: 
        rules: [
            
                test: /.js$/,
                use: 'babel-loader'
            ,
            
                test: /.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            ,
            
                test: /.less$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'less-loader'
                ]
            ,
            
                test: /.(png|jpg|gif|jpeg)$/,
                use: [
                    
                        loader: 'file-loader',
                        options: 
                            name: '[name]_[hash:8].[ext]'
                        
                    
                ]
            ,
            
                test: /.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    
                        loader: 'file-loader',
                        options: 
                            name: '[name]_[hash:8][ext]'
                        
                    
                ]
            
        ]
    ,
    plugins: [
        new MiniCssExtractPlugin(
            filename: '[name]_[contenthash:8].css'
        ),
        // 开启CSS压缩
        new OptimizeCSSAssetsPlugin(
            assetNameRegExp: /\\.css$/g,
            cssProcessor: require('cssnano')
        )
    ]
;

3. 压缩html文件

1.安装插件

npm i html-webpack-plugin -D

2. 配置Webpack

'use strict';

const path = require('path');
// npm i mini-css-extract-plugin -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// npm i optimize-css-assets-webpack-plugin -D
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
// npm i html-webpack-plugin -D
const HtmlWebpackPlugin = require('html-webpack-plugin');


module.exports = 
    entry: 
        index: './src/index.js',
        search: './src/search.js'
    ,
    output: 
        path: path.join(__dirname, 'dist'),
        filename: '[name]_[chunkhash:8].js'
    ,
    mode: 'production',
    module: 
        rules: [
            
                test: /.js$/,
                use: 'babel-loader'
            ,
            
                test: /.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            ,
            
                test: /.less$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'less-loader'
                ]
            ,
            
                test: /.(png|jpg|gif|jpeg)$/,
                use: [
                    
                        loader: 'file-loader',
                        options: 
                            name: '[name]_[hash:8].[ext]'
                        
                    
                ]
            ,
            
                test: /.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    
                        loader: 'file-loader',
                        options: 
                            name: '[name]_[hash:8][ext]'
                        
                    
                ]
            
        ]
    ,
    plugins: [
        // 提取单独的CSS文件
        new MiniCssExtractPlugin(
            filename: '[name]_[contenthash:8].css'
        ),
        // 开启CSS压缩
        new OptimizeCSSAssetsPlugin(
            assetNameRegExp: /\\.css$/g,
            cssProcessor: require('cssnano')
        ),
        // 压缩index.html文件
        new HtmlWebpackPlugin(
            template: path.join(__dirname, 'src/index.html'),
            filename: 'index.html',
            chunks: ['index'],
            inject: true,
            minify: 
                
                html5: true,
                collapseWhitespace: true,
                preserveLineBreaks: false,
                minifyCSS: true,
                minifyJS: true,
                removeComments: false
            
        ),

        // 压缩search.html文件
        new HtmlWebpackPlugin(
            template: path.join(__dirname, 'src/search.html'),
            filename: 'search.html',
            chunks: ['search'],
            inject: true,
            minify: 
                html5: true,
                collapseWhitespace: true,
                preserveLineBreaks: false,
                minifyCSS: true,
                minifyJS: true,
                removeComments: false
            
        )  
    ]
;

以上是关于Webpack中压缩代码文件的主要内容,如果未能解决你的问题,请参考以下文章

在python中压缩文件

在java中压缩和解压缩7z文件

试图在 python 中压缩一些文件。但是大小并没有被压缩。

如何读取Hadoop中压缩的文件

如何zstd从输入文件中压缩一大块字节?

如何在android中压缩和解压缩png图像