前言

本文演示了

  • 如何开始css模块化;
  • 如何选择性的开启部分css文件的模块化功能;
  • 如何让模块化后写入html的class更具有可读性;
  • 涉及到的loader: css-loader、style-loader



开启css-loader的模块化配置

当前项目目录和package.json配置::

webpack之css模块化

webpack之css模块化

如何使css模块化?需要在我们的webpack.config.js中对css-loader进行一些额外设置。

webpack之css模块化

编辑main.css

webpack之css模块化

编辑之前的app.js 文件

webpack之css模块化

编辑之后的app.js 文件

webpack之css模块化

执行 npm run dev

浏览器截图如下:

可以看出浏览器控制台打印出的main是一个js对象,所以我们在应用main.css中的类名的时候,需要用 main.ot 。


webpack之css模块化

同理,我们可以新建多个css文件(main1.css、main2.css),引用其中的类名的时候,只需要用main1.o或者main2.ot。这样即使不同的样式文件中class重名也不会产生样式的覆盖。

但是,一旦开启css模块化,意味着所引入的所有的css文件都要用css模块化的写法。


如何开启单个样式文件的全局模式呢(某个样式文件不想要css模块化的写法)?

可以在webpack.config.js中配置两次处理css的loader,配置如下图:

webpack之css模块化

上面的配置保证了在node_modules和src/common下的css是全局的,在其之外的css是模块化的。

编写app.js如下。

webpack之css模块化

执行npm run dev,测试两个样式均正常加载。

打开浏览器控制台,看到生成的html中的class名是一堆base64字符。

webpack之css模块化


如何让css模块化后生成的class具有可读性?

配置webpack.config.js中css-loader的localIdentName:

webpack之css模块化

执行npm run dev,浏览器控制台截图如下:

webpack之css模块化

可以看出 '[path]-[name]-[local]-[hash:base64:6]' 对应  'src-common-style--main-ot-7LqHWv'。

一般,在项目中配置 localIdentName: '[name]-[local]-[hash:base64:6]' 就可以。



相关文章: