如何在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 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
Vue3中的Refs和Ref详情
Nov 11 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
js自定义事件代码说明
2011/01/31 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python笔记(叁)继续学习
2012/10/24 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python语法分析之字符串格式化
2019/06/13 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
经销商会议欢迎词
2014/01/11 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书