如何在 Webpack 配置文件中将 CSS 名称设置为不是哈希?
Posted
技术标签:
【中文标题】如何在 Webpack 配置文件中将 CSS 名称设置为不是哈希?【英文标题】:How can I set a CSS name not to be a hash in a Webpack configuration file? 【发布时间】:2018-04-13 14:33:36 【问题描述】:我只是想知道为什么在我构建并运行我的 React + Webpack 应用程序之后,我的 CSS 名称变成了 hash。是否有我可能错过的将 CSS 名称设置为正常的高级配置?
这是我的 Webpack 配置:
var webpack = require('webpack');
var path = require('path');
module.exports =
entry: './app/app.jsx',
output:
path: __dirname,
filename: './public/bundle.js'
,
resolve:
alias:
applicationStyles: path.resolve(__dirname,'app/styles/app.css'),
Clock: path.resolve(__dirname,'app/components/Clock.jsx'),
Countdown: path.resolve(__dirname,'app/components/Countdown.jsx'),
CountdownForm: path.resolve(__dirname,'app/components/CountdownForm.jsx')
,
extensions: ['.js', '.jsx']
,
module:
rules: [
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/
,
test: /\.css$/,
use: [
loader: 'style-loader' ,
loader: 'css-loader',
options:
modules: true
]
]
,
devtool: 'cheap-module-eval-source-map'
;
这是变成哈希的 CSS 名称:
为了更清楚,我添加了我如何在 React 上 import
和 use
的 CSS 的源代码:
import React from 'react';
import ReactDOM from 'react-dom';
import Countdown from 'Countdown';
/* Import the CSS file */
import Styles from 'applicationStyles';
ReactDOM.render(
/* Use CSS */
<div className=Styles.box>
<Countdown/>
</div>,
document.getElementById('app')
);
【问题讨论】:
【参考方案1】:可以使用 CSS 模块的 localIdentName
选项将类名与自动生成的哈希组合,方法是将其设置为 [local]_[hase:base64:5]
。
[local]
这里指的是类名。
[hash:base64:5]
表示生成长度为 5 的 Base64 哈希字符串。
test: /\.css$/,
use: [
'style-loader',
loader: 'css-loader',
options:
modules:
localIdentName: '[local]_[hash:base64:5]'
]
通过将css-loader
模块选项设置为对象,您实际上是将模块设置为true
,但具有特定选项。
将localIdentName
设置为[local]
完全违背了使用CSS 模块的目的。
【讨论】:
【参考方案2】:在您的 Webpack 配置中,CSS 加载器需要配置前缀名称。基本上localIdentName:'[local]'
只将前缀设置为本地类名。
详细信息可以关注the documentation for CSS Loader
module:
rules: [
test: /\.css$/,
use: [
loader: 'style-loader' ,
loader: 'css-loader',
options:
modules: true,
localIdentName:'[local]'
]
]
【讨论】:
【参考方案3】:这是 Webpack 默认所做的,以避免相同的 CSS 类(来自不同的 CSS 模块)发生冲突。
您可以做以下三件事:
1:在应用程序级别,您可以将以下配置添加到您的 Webpack 以禁用 CSS 模块。不建议这样做,因为它可能会导致碰撞和难以发现的错误。
options:
modules: false
2:在文件级别,可以这样导入,防止 Webpack 混淆类名。这在导入第三方配置库 CSS 文件时很有用。
import '!style!css!golden-layout-css-base';
3:在 CSS 类级别,您可以使用:global(.your-class-name)
来避免混淆特定类
:global(.container)
padding: 10px;
【讨论】:
我在尝试 2 号时遇到错误。这是消息:You may need an appropriate loader to handle this file type.
我也试过 1 号和 3 号。 css 不工作。以上是关于如何在 Webpack 配置文件中将 CSS 名称设置为不是哈希?的主要内容,如果未能解决你的问题,请参考以下文章
如何在与 webpack 捆绑时将 SASS 变量转换为原生 CSS 变量?