一、提取css成单独文件
1、先用以往的开发模式来打包。创建以下文件夹,build里的内容是打包后生成的。
index.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 id="box1"></div>
<div id="box2"></div>
</body>
</html>
index.js
import '../css/text1.css';
import '../css/text2.css'
webpack.config.js
const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: './js/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build'),
},
module: {
rules:
[
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlwebpackPlugin(
{
template: './index.html'
}
)
]
}
text1.css
#box1 {
width: 100px;
height: 100px;
background-color: pink;
}
text2.css
#box2 {
width: 200px;
height: 200px;
background-color: deeppink;
}
2、随后打开终端输入:
npm init
webpack_css_code
npm i webpack webpack-cli -D
npm i css-loader style-loader -D
npm i html-webpack-plugin -D
3、在下载好相关包后,打开package.json,修改内部的scripts代码。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --mode development",
"build": "webpack --mode production"
},
4、然后终端输入:
npm run dev
5、最后打开build文件夹下生成的index.html查看效果
那么此时我们使用传统的手法打包成功了。
打开生成的built.js发现,之前的css样式被写在了这里面,现在想提取出来,使成为单独的文件。
6、下载插件npm i mini-css-extract-plugin -D
7、然后修改webpack.config.js内的代码,使用该插件:
const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
entry: './js/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build'),
},
module: {
rules:
[
{
test: /\.css$/,
use:
[
// 创建style标签,将样式放入
// 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
// 使用下边的插件进行取代,提取js中的css成单独文件
MiniCssExtractPlugin.loader,
// 将css文件整合到js文件中
'css-loader'
]
}
]
},
plugins: [
new HtmlwebpackPlugin(
{
template: './index.html'
}
),
new MiniCssExtractPlugin(
{
// 对输出的文件重命名
filename: 'built.css'
}
)
]
}
8、那么此时,运行npm run dev,
build文件夹下有一个built.css生成。
同文件夹下的index.html引入样式的方法变为了通过link标签引入。
最后在打开index.html查看效果。
二、css的兼容性处理
1、将上一节代码全部复制过来,重命名。
然后只修改config配置。
css兼容性处理: postcss --> 需要插件postcss-loader 、postcss-preset-env。
终端中输入下述命令下载。
npm i postcss-loader postcss-preset-env -D
2、webpack.config.js代码
const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 设置node.js环境变量,使其默认是处于开发环境development,不是生产环境
process.env.NODE_ENV = 'development'
module.exports = {
entry: './js/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build'),
},
module: {
rules:
[
{
test: /\.css$/,
use:
[
// 创建style标签,将样式放入
// 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
// 使用下边的插件进行取代,提取js中的css成单独文件
MiniCssExtractPlugin.loader,
// 将css文件整合到js文件中
'css-loader',
//css兼容性处理: postcss --> 插件postcss-loader 、postcss-preset-env
//这些插件帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
//使用loader的默认配置
//"postcss-loader',
//修改loader的配置
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [require('postcss-preset-env')()]
}
}
}
]
}
]
},
plugins: [
new HtmlwebpackPlugin(
{
template: './index.html'
}
),
new MiniCssExtractPlugin(
{
// 对输出的文件重命名
filename: 'built.css'
}
)
]
}
3、在pachage.json中修改browserslist配置。
其中browserslist的development部分表示兼容最近一个版本的浏览器,production中表示兼容百分之99.8的浏览器,不要兼容已经停用的浏览器。
{
"name": "webpack_css",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --mode development",
"build": "webpack --mode production"
},
"author": "",
"license": "ISC",
"devDependencies": {
"css-loader": "^6.5.1",
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.4.5",
"postcss-loader": "^6.2.1",
"postcss-preset-env": "^7.1.0",
"style-loader": "^3.3.1",
"webpack": "^5.65.0",
"webpack-cli": "^4.9.1"
},
"browserslist": {
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
],
"production": [
">0.2%",
"not dead",
"not op_mini all"
]
}
}
4、修改text1.css的内容,增加新样式。
#box1 {
width: 100px;
height: 100px;
background-color: pink;
/* 增加两个在特定浏览器有兼容性问题的样式 */
display: flex;
backface-visibility: hidden;
}
5、随后输入npm run dev
。
打开生成的build文件夹下的built.js,发现对刚刚新增加的两个样式做了兼容处理。
三、压缩css
1、复制上一节全部代码,在基础上进行修改。
压缩css需要引入一个插件css-minimizer-webpack-plugin。
2、终端输入命令npm i css-minimizer-webpack-plugin -D
进行下载(这是webpack5中的插件)。
3、修改webpack.config.js配置
const { resolve } = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')
// 设置node.js环境变量,使其默认是处于开发环境development,不是生产环境
//压缩css的插件css-minimizer-webpack-plugin
process.env.NODE_ENV = 'development'
module.exports = {
entry: './js/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build'),
},
module: {
rules:
[
{
test: /\.css$/,
use:
[
// 创建style标签,将样式放入
// 'style-loader',所以想提取css成单独文件时,这里不能把css样式放入
// 使用下边的插件进行取代,提取js中的css成单独文件
MiniCssExtractPlugin.loader,
// 将css文件整合到js文件中
'css-loader',
//css兼容性处理: postcss --> 插件postcss-loader 、postcss-preset-env
//这些插件帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
//使用loader的默认配置
//"postcss-loader',
//修改loader的配置
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [require('postcss-preset-env')()]
}
}
}
]
}
]
},
plugins: [
new HtmlwebpackPlugin(
{
template: './index.html'
}
),
new MiniCssExtractPlugin(
{
// 对输出的文件重命名
filename: 'built.css'
}
),
new CssMinimizerWebpackPlugin(
{
// 压缩css的插件
}
)
]
}
4、终端输入npm run dev,
随后就可以查看build文件夹下的built.css文件的大小。
![](https://img-blog.csdnimg.cn/img_convert/dcbc794ff4485cad8c0ae1a6359e3106.png)
注:教程转载自疯子的梦想@博客