如何在vue-cli中使用css-loader实现css module


Posted in Vue.js onJanuary 07, 2021

【前言】

无论是vue还是react的css模块化解决方案都是依赖loader来实现的 在使用上,vue中用scoped属性实现样式的私有化,利用深度作用选择器/deep来实现样式的去私有化。

例子:

<div>
  <div class="demo">
    <div class="child"></
    div>
  </div>
</div>
<script>
// some code
<script/>
<style lang="less" scoped>
 .demo {
  height: 100px;
  padding-top: 20px;
  background-color: grey;
  /deep/.child {
   color: red;
  }
 }
</style>

在react中使用上是这么搞的(基于css-loader):

//test.less
.demo {
  height: 100px;
  padding-top: 20px;
  background-color: grey;
  :global(.child) {
    color: red
  }
}
import styles from './test.less'

// some code

<div className={styles.demo}>
  <div class="child"></div>
</div>

不得不说,在使用上还是vue比较方便。

如果硬要在vue中使用css-loader实现css module的这套解决方案呢?这里以vue-clie 3.x为例。

无论在vue的脚手架vue-cli中还是在react的脚手架umi中,,现在都使用了webpack-chain来实现配置webpack.

这里在vue-cli脚手架创建的项目根目录下,新建vue.config.js,并写入如下内容:

module.exports = {
 chainWebpack: (config) => {
  config.devServer
   .proxy({
    '/api': {
     target: 'http://localhost:3000',
     pathRewrite: { '^/api': '', },
    },
   })
   .port(9000);

  config.module
  .rule('less')
  .oneOf('normal-modules')
  .test(/.less$/)
  .use('css-loader')
  .tap(options => {
   return Object.assign(options, {
    modules: {
     localIdentName: '[name]__[local]___[hash:base64:5]',
     auto: /\.less$/i,
    },
   })
  });

 },
};

本来其实也不用写这段内容,默认情况,vue-cli的脚手架已经配置了css-loader的模块化,但是需要把less文件命名成xxx.module.less的形式,这和umi那套不同,也不方便,这样配置然后重启,就能像react一样写css了,另外把引入的style存入data中。这里只是说下可以在vue-cli使用css-loader的那套解决方案,但最佳实践还是用vue自带的那套。

以上就是如何在vue-cli中使用css-loader实现css module的详细内容,更多关于vue-cli中使用css-loader实现css module的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
如何实现vue的tree组件
Dec 03 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 #Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 #Vue.js
详解Vue2的diff算法
Jan 06 #Vue.js
vuex的使用步骤
Jan 06 #Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 #Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 #Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 #Vue.js
You might like
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
浅谈javascript语法和定时函数
2015/05/03 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python实现翻译word表格小程序
2020/02/27 Python
用Python进行websocket接口测试
2020/10/16 Python
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
职工运动会邀请函
2014/02/02 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
环卫工人节活动总结
2014/08/29 职场文书
入党个人总结范文
2015/03/02 职场文书
《风筝》教学反思
2016/02/23 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android