最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于webpack项目混用cssmodule的方法

来源:动视网 责编:小采 时间:2020-11-27 18:48:02
文档

关于webpack项目混用cssmodule的方法

关于webpack项目混用cssmodule的方法:这篇文章主要介绍了webpack项目轻松混用css module的方法,内容挺不错的,现在分享给大家,也给大家做个参考。前言本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下
推荐度:
导读关于webpack项目混用cssmodule的方法:这篇文章主要介绍了webpack项目轻松混用css module的方法,内容挺不错的,现在分享给大家,也给大家做个参考。前言本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下


这篇文章主要介绍了webpack项目轻松混用css module的方法,内容挺不错的,现在分享给大家,也给大家做个参考。

前言

本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。

比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module

一、产生问题的原因

{ 
 test: /\.css$/,
 use: [
 'style-loader',
 {
 loader: 'css-loader',
 options: {
 modules: true,
 localIdentName: '[hash:base64:6]'
 }
 },
 'postcss-loader'
 ] 
}

以上代码片段,摘自webpack配置的module.rule。

可以看出wepack在编译过程中,遇到.css结尾的文件,都会交由postcss-loader、css-loader和style-loader依次处理。

因为css-loader开启了css模块功能,所以,所有经过处理的css文件,类名都将被改变。

二、初步改进

使用exclude和include进行区分

1.node_module文件夹内的文件,避免被当前rule处理

{ 
 test: /\.css$/,
 use: [
 {
 loader: 'style-loader'
 },
 {
 loader: 'css-loader',
 options: {
 modules: true,
 localIdentName: '[hash:base64:6]'
 }
 },
 {
 loader: 'postcss-loader'
 }
 ],
 exclude:[path.resolve(__dirname, '..', 'node_modules')]
}

如上所示,将node_module文件夹内的文件,用exclude排除在外,不用当前rule进行处理。

2.单独处理node_module内的css文件

{ 
 test: /\.css$/,
 use: [
 {
 loader: 'style-loader'
 },
 {
 loader: 'css-loader'
 },
 {
 loader: 'postcss-loader'
 }
 ],
 include:[path.resolve(__dirname, '..', 'node_modules')]
}

三、升级版,支持css module模式和普通模式混用

1.用文件名区分两种模式

  1. *.global.css 普通模式

  2. *.css css module模式

这里统一用 global 关键词进行识别。

2.用正则表达式匹配文件

// css module
{ 
 test: new RegExp(`^(?!.*\\.global).*\\.css`),
 use: [
 {
 loader: 'style-loader'
 },
 {
 loader: 'css-loader',
 options: {
 modules: true,
 localIdentName: '[hash:base64:6]'
 }
 },
 {
 loader: 'postcss-loader'
 }
 ],
 exclude:[path.resolve(__dirname, '..', 'node_modules')]
}

// 普通模式
{ 
 test: new RegExp(`^(.*\\.global).*\\.css`),
 use: [
 {
 loader: 'style-loader'
 },
 {
 loader: 'css-loader',
 },
 {
 loader: 'postcss-loader'
 }
 ],
 exclude:[path.resolve(__dirname, '..', 'node_modules')]
}

四、其他问题

less在使用css module时,对url的解析存在冲突,可以用resolve-url-loader进行解决,直接上代码:

test: /\.less/,
use: [
 {
 loader: "style-loader"
 },
 {
 loader: "css-loader", 
 options: {
 sourceMap: true,
 importLoaders: 2
 }
 },
 {
 loader: "postcss-loader", 
 options: {
 sourceMap: true
 }
 },
 {
 loader: "resolve-url-loader", 
 options: {
 sourceMap: true
 }
 },
 {
 loader: "less-loader", 
 options: {
 sourceMap: true
 }
 }
]

文档

关于webpack项目混用cssmodule的方法

关于webpack项目混用cssmodule的方法:这篇文章主要介绍了webpack项目轻松混用css module的方法,内容挺不错的,现在分享给大家,也给大家做个参考。前言本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下
推荐度:
标签: css module web项目
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top