本文講述css-loader
開啓css模塊
功能以後,如何與引用的npm包中樣式文件不產生衝突。
好比antd-mobile
npm包的引入。在不作特殊處理的前提下,樣式文件將會被轉譯成css module
。
javascript
{ 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
文件,類名都將被改變。css
使用
exclude
和include
進行區分java
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
進行處理。node
node_module
內的css文件{ test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader' } ], include:[path.resolve(__dirname, '..', 'node_modules')] }
css module
模式和普通模式混用普通模式
css module模式
這裏統一用 global
關鍵詞進行識別。webpack
// 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
進行解決,直接上代碼:git
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 #121github