如何在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 插槽简介及使用示例
Nov 19 Vue.js
vue单元格多列合并的实现
Nov 26 Vue.js
vue element实现表格合并行数据
Nov 30 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
关于vue-router-link选择样式设置
Apr 30 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
PHP session会话的安全性分析
2011/09/08 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
php源码的使用方法讲解
2019/09/26 PHP
JavaScript使用cookie
2007/02/02 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
Python读写docx文件的方法
2018/05/08 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
logging level级别介绍
2020/02/21 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
会计专业个人求职信范文
2014/01/08 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
Nginx进程调度问题详解
2021/09/25 Servers