webpack抽取CSS文件与CSSTreeShaking
- webpack抽取CSS文件
- CSSTreeShaking
一、webpack抽取CSS文件
抽取CSS文件的插件:mini-css-extract-plugin
npm install --save-dev mini-css-extract-plugin
详细参考:https://www.npmjs.com/package/mini-css-extract-plugin
但是前提还是需要下载一个css加载器:
npm install css-loader --save-dev
测试工作区间文件结构:
//工作区间
src//文件夹
index.js//主入口js文件
demo.css//依赖的css文件
index.html//用于测试的html结构文件
webpack.config.js//项目配置文件
package.json//系统配置文件
主入口文件index.js(在主入口文件中引入依赖样式文件demo.css):
import './demo.css';
依赖样式文件demo.css文件(给定一些测试代码):
body{background-color: #333;}
div{
width: 300px;
height: 300px;
background-color: #ffa;
}
a{color: red;}
h1{color:blue;}
项目配置文件webpack.config.js文件的具体配置代码:
const MiniCssExtractPlugin = require ('mini-css-extract-plugin');
module.exports = {
module:{
rules:[
{
test:/\.css$/,
use:[MiniCssExtractPlugin.loader,'css-loader']
}
]
},
plugins:[
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: '[name].css',
// chunkFilename: '[id].css',
})
]
}
需要注意的是在modeule加载器中,在use配置插件时世界写入插件名,以require引入插件模块的命名为准,然后在名称后面添加loader后缀。不能像使用webpack自带的加载器那样使用字符串和中划线的方式。
然后在plugins插件中配置这个插件,输出的名称与输出的js文件名称一致,这里我没有配置输出属性js文件默认未main.js,所以输出的css名称也是默认的main.css。具体需要了解输出名称配置的话参考这篇博客:webpack安装与核心概念
webpack
执行打包成功后会在dist中生成main.js和main.css文件,再在测试的html文件中引入生成的main.css文件,也可以直接使用编辑器打开main.css文件查看,你会惊奇的发现它与demo.css的代码一摸一样。
二、CSSTreeShaking
这里需要下载两个插件:purifycss-webpack purify-css
npm install purifycss-webpack purify-css --save-dev
然后配置项目配置文件webpack.config.js:(在上面的基础上添加配置)
const path = require('path');
const glob = require('glob');
const PurifyCSSPlugin = require('purifycss-webpack');
//插件配置
plugins:[
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: '[name].css',
// chunkFilename: '[id].css',
}),
new PurifyCSSPlugin({
// 配置这个css文件作用的html文件路径--我的测试项目中只有一个html文件,直接给了根目录下的所有html文件
paths: glob.sync(path.join(__dirname, './*.html')),
})
]
在配置插件plugins配置的时候需要注意,如果同时在项目中又jsTreeShaking操作的话,一定要将CSSTreeShaking配置在js的前面,不然会报错!下面给出我依赖的html文件代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="./dist/main.css">
</head>
<body>
<div></div>
</body>
</html>
这时候再次执行打包,如果正确执行了打包的话,在main.css中就只存在body和div的样式代码了,这就是CSSTreeShaking的全部操作。https://www.npmjs.com/package/purifycss-webpack
别着急,还没结束呢!
在实际开发中一定存在js插入HTML文件结构的情况,这时候如果只配置作用的html文件是肯定不能监听到js中添加的html结构,比如测试中的主入口js文件代码是这样:
import './demo.css';
var div = document.getElementsByTagName('div')[0];
div.innerHTML = '<a>测试CssTreeShaking</a>';
这时候就需要在plugins中添加这个css文件作用的js文件了,测试代码需要这样添加:
new PurifyCSSPlugin({
// 配置这个css文件作用的html文件路径--我的测试项目中只有一个html文件,直接给了根目录下的所有html文件
paths: glob.sync([
path.join(__dirname, './*.html'),
path.join(__dirname, './src/*.js')
]),
})
除了配置作用文件以外,因为js匹配还需要配置全局匹配,所以配置文件还需要改一行代码(根据变量名找到对应的修改代码):
const glob = require('glob-all');
然后还需要下载这个glob-all模块:
npm install glob-all --save-dev
这时再执行打包的话,正确的打包main.css代码包含了body、div、a三个标签样式。
webpack抽取CSS文件与CSSTreeShaking的更多相关文章
- 使用Webpack对Css文件压缩处理的思考
问题的起因: 使用 bulma.css ,通过webpack打包后样式出错,查看压缩代码,发现代码从css的 long hand 属性被压缩为 short hand(PS: 什么是long hand ...
- webpack中css文件的代码分割
module.exports = { output: { filename: '[name].js', chunkFilename: '[name].chunk.js', path: path.res ...
- 透过现象看webpack处理css文件中图片路径转换的具体过程
webpack是目前使用比较流行的一个前端模块打包器,前端的任何资源都被当成一个模块来处理,如图片.css文件等等.在基于webpack构建的前端项目中,一般都会配置有关css文件处理的规则,这其中也 ...
- webpack(5)webpack处理css文件
css文件处理-准备工作 (以下项目配置都是基于上一篇webpack(4)的基础上) 在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中. 这里我们就在src目录中创建一个n ...
- webpack打包css文件
1. 安装css-loader 与 style-loader npm install style-loader css-loader --save-dev 2. 在webpack.config.js中 ...
- webpack打包 css文件里面图片路径 替换位置
{ test: /\.css$/, use: ExtractTextPlugin.extract({ use: ['css-loader?minimize', 'autoprefixer-loader ...
- webpack引入css文件
需要配置 postcss 详见 官网 https://www.postcss.com.cn/
- webpack模块加载css文件及图片地址
webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...
- webpack2.0 css文件引入错误解决及图片输出在根目录配置问题
webpack引入css文件,main.js内容如下 import Vue from 'vue'; import App from './App.vue'; import Mint from 'min ...
随机推荐
- SQL:百科
ylbtech-SQL:百科 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理 ...
- jeecg根据模板自定义导出
//1.获取模板的路径: String lujing = request.getSession().getServletContext().getRealPath("/")+ &q ...
- selenium 学习中遇到的问题汇总
1.使用document.getByClassName时无click事件,然后就不知道怎么办了,也不太懂前端,与开发大哥确认,div 中class实现展开和收起是通过隐藏和显示这种方式实现的,在编写时 ...
- WPF学习笔记 - .Net Framework的分离存储技术
写入: protected override void OnClosed(EventArgs e) { base.OnClosed(e); IsolatedStorageFile f = Isolat ...
- 侧方、s弯道、坡起相关
侧方: 方向盘上端对准路中箭头直行,当前面箭头头部尖角刚刚消失,停车,挂倒档,倒,当箭头尾部快要消失时右打死,侧身看左后视镜(这时可以稍微踩一下离合控制速度为低速),当出现库底角回正,坐直,当左侧第一 ...
- npm publish 发布失败 无法连接 https://registry.npmjs.org
自己写的npm包,之前每次更新都是正常发布,最近做个一个更新,想发布,然后npm publish 竟然失败, 错误提示如下: npm ERR! network request to https://r ...
- docker 启动镜像报 WARNING: IPv4 forwarding is disabled. Networking will not work.
centos7 解决办法: # vi /etc/sysctl.conf 添加如下代码: net.ipv4.ip_forward=1 重启network服务 # systemctl restar ...
- SecureCRT 8.3注册码下载
SecureCRT注册码是一款针对“SecureCRT 8.3”软件而制作的激活破解工具,可以完美激活“SecureCRT”软件,从而达到免费使用的目的.而SecureCRT则是一款非常优秀的且支持s ...
- vue 新闻列表滚动效果
效果如下: <template> <div> <div class="scroll-wrap"> <ul class="scro ...
- vue中打包之后的dist文件不放在服务器的根目录下
在工作当中,我使用webpack打包的dist,由于管理的问题,无法被放在服务器根目录下 ,但在目前的vue配置,dist不放在根目录下,访问页面会成为一片空白,于是便要对vue框架的config进行 ...