We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。 比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。
css-loader
css模块
antd-mobile
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文件,类名都将被改变。
webpack
module.rule
wepack
.css
postcss-loader
style-loader
css
使用exclude和include进行区分
exclude
include
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进行处理。
{ test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader' } ], include:[path.resolve(__dirname, '..', 'node_modules')] }
普通模式
css module模式
这里统一用 global 关键词进行识别。
global
// 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进行解决,直接上代码:
less
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 } } ]
[1] Updated README regarding relative filepaths issue #121
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
本文讲述
css-loader
开启css模块
功能之后,如何与引用的npm包中样式文件不产生冲突。比如
antd-mobile
npm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module
。一、产生问题的原因
以上代码片段,摘自
webpack
配置的module.rule
。可以看出
wepack
在编译过程中,遇到.css
结尾的文件,都会交由postcss-loader
、css-loader
和style-loader
依次处理。因为
css-loader
开启了css模块
功能,所以,所有经过处理的css
文件,类名都将被改变。二、初步改进
1.
node_module
文件夹内的文件,避免被当前rule
处理如上所示,将
node_module
文件夹内的文件,用exclude
排除在外,不用当前rule
进行处理。2.单独处理
node_module
内的css文件三、升级版,支持
css module
模式和普通模式混用1.用文件名区分两种模式
普通模式
css module模式
这里统一用
global
关键词进行识别。2.用正则表达式匹配文件
四、其他问题
less
在使用css module
时,对url
的解析存在冲突,可以用resolve-url-loader
进行解决,直接上代码:参考
[1] Updated README regarding relative filepaths issue #121
The text was updated successfully, but these errors were encountered: