webpack-css打包超详解 ( 分离 & 压缩 )

Posted 前端呆头鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack-css打包超详解 ( 分离 & 压缩 )相关的知识,希望对你有一定的参考价值。

零 功能简介

webpack是一款模块化打包软件,通过插件和加载器的配置,它可以对html,js,css进行分离打包和压缩。

分离打包插件会将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件。

压缩会将css文件进行压缩,如注释压缩和格式压缩,选择器精简等。

其中html通过插件HtmlWebpackPlugin完成,js默认压缩,这里重点讲一下css,因为呆头鹅在配置过程中遇到了多个问题报错。

报错分两种:

  • webpack版本与所用插件不兼容
  • 所用插件之间不兼容

css的打包和压缩配置相关四个插件。

首先上总结:

低版本用extract-text-webpack-plugin分离打包,optimize-css-assets-webpack-plugin压缩,高版本使用MiniCssExtractPlugin分离打包,css-minimizer-webpack-plugin压缩。

一 extract-text-webpack-plugin

首先引入该依赖。

npm install extract-text-webpack-plugin --save-dev

在wabpack配置文件中引入并配置。

var Ex = require('extract-text-webpack-plugin');
module.exports = {
    ...
	// ...省略
	module: {
  		loaders: [{
    		test: /\\.css/,
    		loader: Ex.extract('style-loader', 'css-loader','less-loader')  
            // 单独打包出CSS,这里配置注意下
  		}]
	},
	plugins: [
  		new Ex("[name].css")
	]
    ...
}

然后打包编译。

npm run build

这里存在一个问题,就是高版本不兼容问题,文档上写着4x后不兼容,实际呆头鹅使用的是3.3.12版本,也是不兼容的。

不兼容则使用另一个插件进行打包。

二 MiniCssExtractPlugin

引入后配置,这里需要注意use中不能添加style-loader。

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
    ...
	module: {
    	rules: [{
        	test: /\\.css$/,
        	use: [
           		MiniCssExtractPlugin.loader,
           		'css-loader'
        	]
    	}]
	},
	plugins: [
  		new MiniCssExtractPlugin()
	]
    ...
}

如果使用了MiniCssExtractPlugin的方式抽离css,在后面配置压缩css时就需要使用对应的css-minimizer-webpack-plugin。

三 css-minimizer-webpack-plugin

npm i css-minimizer-webpack-plugin -D
const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin");
module.exports = {
    ...
	plugins: [
		...,
		new CssMinimizerWebpackPlugin()
	]
	...
}

四 optimize-css-assets-webpack-plugin

如果使用的是第一种打包插件extract-text-webpack-plugin,就可能需要插件optimize-css-assets-webpack-plugin,同时使用cssnano进行压缩。

安装依赖。

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

引用插件。

module.exports = {
    ...
	plugins: [
		...,
		new OptimizeCSSAssetsPlugin({
			assetNameRegExp: /.css$/g,
			cssProcessor: require('cssnano')
		})
	]
    ...
}

以上是关于webpack-css打包超详解 ( 分离 & 压缩 )的主要内容,如果未能解决你的问题,请参考以下文章

JAVA生成(可执行)Jar包的全面详解说明 [打包][SpringBoot][Eclipse][IDEA][Maven][Gradle][分离][可执行]

代理设计模式之静态代理与动态代理(超..)详解

前后端分离的springboot+vue项目打包教程

前后端分离的springboot+vue项目打包教程

前后端分离的springboot+vue项目打包教程

服务器项目部署总结(超详细)