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

更新日期: 2022-01-17阅读: 1.2k标签: 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打包工具的应用

webpack 在前端工程中随处可见,当前流行的 vue, react, weex 等解决方案都推崇 webpack 作为打包工具。前端工具云集的时代,这是你值得选择的之一。

一步一步webpack,webpack的学习入门

webpack是前端工程构建的一套工具,为什么一个程序称之为一套呢,是因为webpack其实是npm的一个模块,使用起来的话,这期间还需要很多其它模块来进行支持,所以我称之为一套工具。

如何写 Webpack 配置文件

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

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

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

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

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

优化Webpack构建性能的几点建议

Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位。在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程都息息相关,如何改善 Webpack 构建打包的性能也关系到我们开发和发布部署的效率。

Webpack 4正式发布了!

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

Webpack 4.0.0不再支持 Node.js 4

Webpack 是一个现代 JavaScript 应用程序的模块打包器 (module bundler) 。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块

我当初为什么写webpack_Tobias Koppers

Tobias Koppers是一位自由软件开发者,家住德国纽伦堡。他因写出webpack这个已有数百万开发者使用的开源软件而名噪一时。他目前专注于JavaScript和开源项目。以下是我对他个人的专访,希望对大家有所启发。

webpack项目轻松混用css module

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

点击更多...

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