webpack4 css modules
demo 代码点此,webpack4 中通过 css-loader 开启 css 模块化, 开始前先做点准备工作。
不了解 css 模块化的,可以前往查看github_css_modules.
准备工作
安装 webpack:
npm init -y
npm i -D webpack webpack-cli css-loader
创建 webpack.config.js 进行配置:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
main: './src/index.js'
},
module: {
rules: [
// 不在 node_modules 中的 css,开启 css modules
{
test: /\.css$/,
exclude: /node_modules/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
/* 以前版本是通过 true 开启,相关配置接着写
modules: true
localIdentName: '[name]__[local]--[hash:base64:5]'
*/
// 现在是给 modules 一个 options 对象开启
modules: {
// 重新生成的 css 类名
localIdentName: '[name]__[local]--[hash:base64:5]'
}
}
}
]
},
// 在 node_modules 中的 css,不开启
{
test: /\.css$/,
include: /node_modules/,
use: [
MiniCssExtractPlugin.loader, 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, './src/index.html'),
filename: 'index.html'
}),
new MiniCssExtractPlugin({
filename: '[name].[hash].css'
})
],
output: {
filename: '[name].[hash].bundle.js',
path: path.resolve(__dirname, './dist')
}
}
更多 css-loader 的配置建议前往 github_css-loader 查看,因为版本更新后,配置可能会有变。
编写 css
配置完 webpack,写 css 时要使用相关语法,因为是通过 webpack 打包时进行编译,重新生成新的 css 类名来防止全局变量名污染的。
**注意: css modules 只针对类、Id选择器生效,不会对标签选择器进行模块化。 **
/* 全局样式 */
:global(.header) {
color: #696969;
background-color: #fff;
}
:global .main {
color: #363636;
background-color: #fff;
}
/* less 等预处理语言可以这样写 */
/* :global {
.footer {
color: #303030;
background-color: #fff;
}
} */
/* 局部样式 */
:local(.header) {
color: red;
background-color: #c2b1b1;
}
:local(.main) {
color: yellow;
background-color: rgb(136, 96, 96);
}
:local(.footer) {
color: blue;
background-color: #929292;
}
编译后的 css 代码:
/* 全局样式 */
.header {
color: #696969;
background-color: #fff;
}
.main {
color: #363636;
background-color: #fff;
}
/* less 等预处理语言可以这样写 */
/* :global {
.footer {
color: #303030;
background-color: #fff;
}
} */
/* 局部样式 */
.index__header--1JD7j {
color: red;
background-color: #c2b1b1;
}
.index__main--1j9-Y {
color: yellow;
background-color: rgb(136, 96, 96);
}
.index__footer--gJKjp {
color: blue;
background-color: #929292;
}
使用
因为 css 类名是重新编译后的,所以使用时不能直接使用原 css 类名,要通过 import 语法使用。
import styles from './index.css';
export const Header = () => {
return `
<h1 class=${styles.header}>header</h1>
`
}
在 html 里面是这样的:
<h1 class="index__header--1JD7j">header</h1>
webpack4 css modules的更多相关文章
- CSS Modules入门及React中实践(内附webpack4配置)
本篇文章以整理为主,自己进行了部分修改,如有侵权,请告知 CSS Modules介绍 CSS Modules是什么东西呢?首先,让我们从官方文档入手:GitHub – css-modules/css- ...
- 在Angular1.X中使用CSS Modules
在Angular1.5中,增加了一个Component方法,并且定义了组件的若干生命周期hook,在代码规范中也是推崇组件化开发,但是很遗憾的是,CSS模块化组件化的问题并没有得到解决,大部分项目的打 ...
- CSS modules 与 React中实践
最近一直在学习React,看上去蛮简单的内容,其实学习曲线还是比较高的. 目前学到css绑定的问题,看到有一篇好的文章,就转过来了. CSS 模块化的解决方案有很多,但主要有两类.一类是彻底抛弃 CS ...
- 在React中使用CSS Modules设置样式
最近,一直在看React...那真的是一个一直在学的过程啊,从配置环境webpack,到基础知识jsx,babel,es6,没有一个不是之前没有接触的.其实,我内心是兴奋的啊,毕竟,活着就是要接触一些 ...
- Webpack 2 视频教程 012 - 理解Webpack 中的 CSS 作用域与 CSS Modules
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- 在vue中使用css modules替代scroped
前面的话 css modules是一种流行的模块化和组合CSS的系统. vue-loader提供了与css modules的集成,作为scope CSS的替代方案.本文将详细介绍css modules ...
- css模块化及CSS Modules使用详解
什么是css模块化? 为了理解css模块化思想,我们首先了解下,什么是模块化,在百度百科上的解释是,在系统的结构中,模块是可组合.分解和更换的单元.模块化是一种处理复杂系统分解成为更好的可管理模块的方 ...
- CSS Modules In Webpack
1)从形式上看,CSS Modules 是将CSS中的选择器转换为变量,然后在DOM中引用变量来引入样式. 2)从效果上看,CSS Modules 可以将CSS选择器名字转成随机字符串,保证选择器同名 ...
- CSS Modules 与 scoped 的不一样
What ? css 的作用域表现. Css modules 是一个CSS文件,其中所有类名和动画名称默认为局部作用域. 使用JS编译原生的CSS文件,使其具备模块化的能力,该文件需要import使用 ...
随机推荐
- 在Dynamis CRM中打造一键保存关闭刷新案例的功能
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复172或者20151114可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 我们知道在Dynamics CR ...
- 使用Dynamics 365 CE Web API查询数据加点料及选项集字段常用查询
微软动态CRM专家罗勇 ,回复336或者20190516可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me. 紧接上文:配置Postman通过OAuth 2 implicit ...
- QTextStream 读取文件乱码的解决办法
通常都是编码转换的问题,注意如以下红字代码那样设置正确的编码 QFile _file(_f_path); try{ if(_file.open(QIODevice::ReadOnl ...
- 当cell中有UItextfiled或者UITextVIew时,弹出键盘把tableview往上,但是有的cell没有移动
cell中有UITextView时,输入文字是需要将tableView向上移,基本的做法是,注册键盘变化的通知在通知的方法中做tableVIew的位置调整, 一,一般做法 - (void)regist ...
- Zeppelie连接jdbc的使用
1. 下载 wget http://apache.mirror.cdnetworks.com/zeppelin/zeppelin-0.8.1/zeppelin-0.8.1-bin-all.tgz 2. ...
- ubuntu 改键
参考: https://www.jianshu.com/p/9411ee427cfd https://www.cnblogs.com/zhengchl/archive/2012/08/25/26557 ...
- 将网站发布到阿里云的Linux服务器上(简述)
这里以idea的springboot项目为例(打成jar包) 这里去阿里云购买服务器的过程就不说了,自行百度 还有这篇只是简述,因为把一个项目部署到服务器要做的事情还是不少的,然后没学过Linux的建 ...
- RSA 登陆加密与解密
最近公司项目验收后,客户请来的信息安全技术人员对我们的网站进行了各种安全测试与排查问题,其中就有一个登陆时的加密问题.本来如果只是单纯的加密,可以直接在前台用MD5加密,将加密的值添加到数据库即可.但 ...
- ue4 FString 中文乱码问题
使用FString出现乱码,最简单的情况,FString Str = "你好"; 这时候就会出现乱码,解决方法是改成这样 FString Str = TEXT("你好&q ...
- 详解Vue生命周期---1
目录 Vue实例的生命周期全过程(图) 在beforeCreate和created钩子函数间的生命周期 created钩子函数和beforeMount间的生命周期 el选项的有无对生命周期过程的影响 ...