如何在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 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
vue 实现上传组件
May 31 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue如何在data中引入图片的正确路径
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
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python实现分页效果
2017/10/25 Python
python之super的使用小结
2018/08/13 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
教师岗位职责范本
2013/12/29 职场文书
现场施工员岗位职责
2014/03/10 职场文书
《观舞记》教学反思
2014/04/16 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
被告代理词范文
2015/05/25 职场文书
党支部半年考察意见
2015/06/01 职场文书
董事会决议范本
2015/07/01 职场文书
用python自动生成日历
2021/04/24 Python
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
教你部署vue项目到docker
2022/04/05 Vue.js