webpack提取css成单独文件、css兼容性处理、压缩css

更新日期: 2022-01-17 阅读: 1.8k 标签: webpack

一、提取css成单独文件

背景:

我们之前打包构建的样式是在js中的,因为有css-loader将样式资源整合到js中了,而样式在js中会让js体积变得非常大,下载速度变得很慢,同时呢,是先加载js才能创建style标签插入到页面中,这里会出现闪屏现象,所以我们要做的事就是将css文件从js中提取出来。

解决方案:

如果想让css单独打包成一个独立的文件需要下载插件mini-css-extract-plugin。

该插件提供了一个MiniCssExtractPlugin.loader,这个loader取代style-loader,作用:提取js中的css成单独文件

下载:

npm i mini-css-extract-plugin@0.9.0

引入:

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

使用:

module.exports = {
plugins: [
new MiniCssExtractPlugin({
// 对输出的css文件进行重命名
filename: "assets/css/main.css",
}),
],
}

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: "assets/js/index.js",
path: resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: /\.css$/,
use: [
// 这个loader取代style-loader,作用:提取js中的css成单独文件
MiniCssExtractPlugin.loader,
"css-loader",
],
},
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
}),
new MiniCssExtractPlugin({
// 对输出的css文件进行重命名
filename: "assets/css/main.css",
}),
],
devServer: {
contentBase: resolve(__dirname, "dist"),
compress: true,
port: 3000,
open: true,
},
mode: "development",
};


二、css兼容性处理

需要使用postcss库,postcss要想在webpack中使用的话要使用postcss-loader,除了这个loader之外还需要使用postcss-preset-env插件,

postcss-preset-env作用:

能够帮助postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容样式,能够让我们兼容性做得精确到某一个浏览器的版本。

在package.json设置browserslist,开发环境只要兼容主要一些调试的浏览器版本就行,而生产环境需要多配置一些,兼容99.8%的浏览器,不要已经死的浏览器比如IE10

下载postcss库

npm i postcss-loader@3.0.0 postcss-preset-env@6.7.0 -D

配置有两种写法

第一种写法:使用loader的默认配置:post-loader

第二种写法:自定义,修改loader配置的话,需要写成一个对象

module.exports = {
module: {
rules: [
{
loader:"postcss-loader",
options:{
ident:"postcss",
plugins:()=>[
// postcss的插件
require("postcss-preset-env")()
]
}
}
]
}
}

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: "assets/js/index.js",
path: resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: /\.css$/,
use: [
// 这个loader取代style-loader,作用:提取js中的css成单独文件
MiniCssExtractPlugin.loader,
"css-loader",
// 使用loader的默认配置
// "postcss-loader",
//修改loader的配置
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: () => [require("postcss-preset-env")()],
},
},
/*
"browserslist":{
// 开发环境-》设置node环境变量:process.env.NODE_ENV = "development"
"development":[
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
],
// 生产环境:默认是看生产环境,所以顶部需要配置成开发环境
"production":[
">0.2%",
"not dead",
"not op_mini all"
]
}
*/
],
},
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
}),
new MiniCssExtractPlugin({
// 对输出的css文件进行重命名
filename: "assets/css/main.css",
}),
],
devServer: {
contentBase: resolve(__dirname, "dist"),
compress: true,
port: 3000,
open: true,
},
mode: "development",
};


三、压缩css

需要使用optimize-css-assets-webpack-plugin插件(一般兼容性处理需要使用loader,压缩之类的需要插件来做)

下载

optimize-css-assets-webpack-plugin

npm i optimize-css-assets-webpack-plugin@5.0.3

引入

const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");

调用

module.exports = {
plugins:[
new OptimizeCssAssetsWebpackPlugin()
]
}

webpack.config.js详细配置如下:

const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");
// 设置nodejs环境变量
process.env.NODE_ENV = "development";
module.exports = {
entry: "./src/js/index.js",
output: {
filename: "assets/js/index.js",
path: resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: /\.css$/,
use: [
// 这个loader取代style-loader,作用:提取js中的css成单独文件
MiniCssExtractPlugin.loader,
"css-loader",

//修改loader的配置
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: () => [require("postcss-preset-env")()],
},
},
],
},
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
}),
new MiniCssExtractPlugin({
// 对输出的css文件进行重命名
filename: "assets/css/main.css",
}),
new OptimizeCssAssetsWebpackPlugin(),
],
devServer: {
contentBase: resolve(__dirname, "dist"),
compress: true,
port: 3000,
open: true,
},
mode: "development",
};

来自:https://mp.weixin.qq.com/s/Iiw78_VJeJV-leGFllRoQA


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/11048

相关推荐

WebPack中Plugins的使用和整理,以及常用的Plugins插件

Plugins是webpack的基础,我们都知道webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展。讲解如果扩展内置插件和其他插件,以及我们常用的Plugins插件

Webpack 4正式发布了!

新版 Webpack 中我们所做的每一个更新目的都在于此,为了当大家在使用 Webpack 的时候敏捷连续毫无顿挫感。 webpack 4 进行构建性能测试,得出的结果非常有趣。结果很惊人,构建时间降低了 60%-98%!

大多数项目中会用到的webpack小技巧

webpack技巧的总结:进度汇报、压缩、复数文件打包、分离app文件与第三方库文件、资源映射、输出css文件、开发模式、分析包的大小、更小的react项目、更小的Lodash、引入文件夹中所有文件、清除extract-text-webpack-plugin日志。

什么是webpack?Webpack的核心概念

Webpack已经流行好久了,但很多同学使用webpack时还是一头雾水,一下看到那么多文档、各种配置、各种loader、plugin立马就晕头转向了。我也不例外,以至于很长一段时间对webpack都是一知半解的状态

如何写 Webpack 配置文件

本文从一个小Demo开始,通过不断增加功能来说明webpack的基本配置,只针对新手。webpack基本的配置就可以熟悉了,会引入loader,配置loader选项,会设置alias,会用plugins差不多。

webpack项目轻松混用css module

本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。

Vue -- webpack 项目自动打包压缩成zip文件

这段时间用 Vue2.0 开发项目,每次打包都会用到 npm run build 命令,但是每次部署时给后端发包都要手动zip压缩,这样一两次还行,但遇到项目板块测试和临时加急功能测试的时候,一天可能就要打包好多次,这就很烦了。

webpack3 升级 webpack4踩坑记录

安装webpack4最新版本;这个在webpack3中,webpack本身和它的CLI是在同一个包中,webpack4中将两个分开管理。记得添加mode用来告知 webpack 使用相应环境的内置优化

Vue中使用webpack别名的方法

Vue中使用webpack别名的方法,需要引入公共文件,但是公共文件的文件路径里当前文件很远,那么就会形成上面示例中的那种路径很长的情况。而因为文件目录是约定俗成的,不可轻易更改,无法修改相对路径。那么该怎么办呢?

通用、封装、简化 webpack 配置

现在,基本上前端的项目打包都会用上 webpack,因为 webpack 提供了无与伦比强大的功能和生态。但在创建一个项目的时候,总是免不了要配置 webpack,很是麻烦。简化 webpack 配置的一种方式是使用社区封装好的库,比如 roadhog。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!