浅谈基于Vue.js的移动组件库cube-ui


Posted in Javascript onDecember 20, 2017

cube-ui 是滴滴公司的技术团队基于 Vue.js 实现的精致移动端组件库。很赞,虽然组件还不是很多,但是基本场景是够用了,感谢开源!

首先创建一个vue项目

vue init webpack my-project
cd my-project
npm install

安装cube-ui

npm install cube-ui -S

官方推荐使用 babel-plugin-transform-modules 插件,可以更优雅引入组件模块以及对应的样式。

npm install babel-plugin-transform-modules -D

然后配置下这个插件,修改 .babelrc:(添加到plugins中去)

{
 "plugins": [
 ["transform-modules", {
  "cube-ui": {
  "transform": "cube-ui/lib/${member}",
  "kebabCase": true,
  "style": {
   "ignore": ["create-api", "better-scroll"]
  }
  }
 }]
 ]
}

引入方式1:全部引入

一般在入口文件main.js中:

import Vue from 'vue'
import Cube from 'cube-ui' // 一般直接放在这个位置
Vue.use(Cube)

全部引入了后就相当于全局注册了,直接用就可以了。不需要在每个.vue文件中import { … }(局部引用),以及components{ … }局部注册了。

引入方式2:按需引入

import {
 /* eslint-disable no-unused-vars */
 Style, // 必需
 Button
} from 'cube-ui'

注意: 按需引入的话,是不会打包基础样式部分的,所以在使用的时候需要引入 style 模块。

注册方式 可选全局注册也可以选择局部注册:

// 全局注册
Vue.use(Button) // 在入口文件中
// 或者局部注册
// 某个组件中
{
 components: {
 CubeButton: Button
 }
}

所有的可按需引入的组件:

import {
 Button,
 Checkbox,
 Loading,
 Tip,
 Toast,
 Picker,
 TimePicker,
 Dialog,
 ActionSheet,
 Scroll,
 Slide,
 IndexList
} from 'cube-ui'

也可以引入create-api和better-scroll模块:

import { createAPI, BetterScroll } from 'cube-ui'

示例

<template>
 <cube-button @click="showDiaog">show dialog<cube-button>
</template>

<script>
 export default {
 methods: {
  showDialog() {
  this.$createDialog({
   type: 'alert',
   title: 'Alert',
   content: 'dialog content'
  }).show()
  }
 }
 }
</script>

不使用后编译

注意: cube-ui 搭配 webpack 2+ 默认就会使用后编译,但是后编译需要有一些依赖以及配置(参见本页最后);如果不想使用后编译的话,可以直接修改 webpack 配置即可:

// webpack.config.js
module.exports = {
 // ...
 resolve: {
 // ...
 alias: {
  // ...
  'cube-ui': 'cube-ui/lib'
  // ...
 }
 // ...
 }
 // ...
}

使用后编译

cube-ui 搭配 webpack 2+ 后就会默认使用后编译,那么应用就需要兼容 cube-ui 的依赖和配置。

1、修改 package.json

{
 // webpack-post-compile-plugin 依赖 compileDependencies
 "compileDependencies": ["cube-ui"],
 "devDependencies": {
 "babel-plugin-transform-modules": "^0.0.2",
 // 新增 stylus 相关依赖 (都需要额外安装:npm install … -D)
 // stylus 类似于 sass,less
 "stylus": "^0.54.5",
 "stylus-loader": "^2.1.1",
 "webpack-post-compile-plugin": "^0.1.2"
 }
}

2、修改 .babelrc,依旧依赖babel-plugin-transform-modules:

"plugins": [
 ["transform-runtime"],
 ["transform-modules", {
 "cube-ui": {
  // 注意: 这里的路径需要修改到 src/modules 下
  "transform": "./node_modules/cube-ui/src/modules/${member}",
  "kebabCase": true
 }
 }]
]

3、修改 webpack.base.conf.js

var PostCompilePlugin = require('webpack-post-compile-plugin')
module.exports = {
 // ...
 plugins: [
 // ...
 new PostCompilePlugin()
 ]
 // ...
}

4、修改 build/utils.js 中的 exports.cssLoaders 函数

exports.cssLoaders = function (options) {
 // ...
 const stylusOptions = {
 'resolve url': true
 }
 // https://vue-loader.vuejs.org/en/configurations/extract-css.html
 return {
 css: generateLoaders(),
 postcss: generateLoaders(),
 less: generateLoaders('less'),
 sass: generateLoaders('sass', { indentedSyntax: true }),
 scss: generateLoaders('sass'),
 stylus: generateLoaders('stylus', stylusOptions),
 styl: generateLoaders('stylus', stylusOptions)
 }
}

运行看看成果:

npm run dev

浅谈基于Vue.js的移动组件库cube-ui

浅谈基于Vue.js的移动组件库cube-ui

参考官方文档;体验一下官方给的示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
javascript入门之window对象【新手必看】
Nov 22 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
Nov 15 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 Javascript
js实现图片上传即时显示效果
Sep 30 Javascript
如何使用vue3打造一个物料库
May 08 Vue.js
Angular2+如何去除url中的#号详解
Dec 20 #Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 #Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 #Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 #Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 #Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 #Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 #Javascript
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php日历[测试通过]
2008/03/27 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
Python FTP操作类代码分享
2014/05/13 Python
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
python文件排序的方法总结
2020/09/13 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
Linux上比较文件的命令都有哪些
2013/09/28 面试题
什么是lambda函数
2013/09/17 面试题
物理系毕业生自荐信
2013/11/01 职场文书
会计专业自荐书
2014/07/08 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL