如何在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+iview分页组件的封装
Nov 17 Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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中判断变量为空的几种方法分享
2013/08/26 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
浅谈PHP的反射机制
2016/12/15 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
python实现多线程端口扫描
2019/08/31 Python
Python高并发和多线程有什么关系
2020/11/14 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
html5时钟实现代码
2010/10/22 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
linux面试相关问题
2013/04/28 面试题
旅行社各个岗位职责
2014/03/15 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
化工工艺设计求职信
2014/06/25 职场文书
销售代理协议书
2014/09/30 职场文书