如何在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中通过render函数给子组件设置ref操作
Nov 17 Vue.js
Vue 的 v-model用法实例
Nov 23 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
详解Vue router路由
Nov 20 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 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
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
YII框架常用技巧总结
2019/04/27 PHP
php实现简易计算器
2020/08/28 PHP
sina的lightbox效果。
2007/01/09 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Vue 中mixin 的用法详解
2018/04/23 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
vue实现简单全选和反选功能
2020/09/15 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
建筑专业自荐信范文
2014/01/05 职场文书
四风查摆剖析材料
2014/10/10 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技