有关css module的疑问

问题描述

看了下css modules,还是很多地方不懂,望大家指教

原理

css-module通过将class转义为hash形式的唯一类名,实现局部作用域。

我的问题

问题一

每次构建时,已经生成的hash形式类名会变化吗?
比如:

<div className="{style.block}"></div>
<p>hello boys</p>

被编译成:

<div class="block_xyT5N"><div>
<p>hello boys</p>

我修改了p标签,为它增加样式

<div className="{style.block}"></div>
<p className="{style.parag}">hello boys</p>

请问,原div生成的block_xyT5N类名会在我修改p标签的样式并重新构建后变化吗?为什么?

问题二

hash形式类名难道不会出现哈希碰撞吗?不会出现重名吗?比如当前文件中的class有几百个,而hash生成一般配置:

{
    test: /\.css$/,
    use: [
        {
            loader: 'style-loader'
        },
        {
            loader: 'css-loader?modules&localIdentName=[name]-[hash:base64:5]'
        }
    ]
},

配置只取前hash的前五个字符,这能保证不重复吗?这不是最多只有十万-1种组合么?

阅读 3.6k
1 个回答

回答一:
不会变
回答二:
我没见过一个页面会有几百种 class,如果有...呵呵

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题