浅谈基于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 30 Javascript
动态标签 悬停效果 延迟加载示例代码
Nov 21 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
JS中的作用域链
Mar 01 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
详解vue中的computed的this指向问题
Dec 05 Javascript
Vue基础配置讲解
Nov 29 Javascript
electron+vue实现div contenteditable截图功能
Jan 07 Javascript
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
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
python开发之thread线程基础实例入门
2015/11/11 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
python中函数默认值使用注意点详解
2016/06/01 Python
Python实现Linux中的du命令
2017/06/12 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2014年店长工作总结
2014/11/17 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
如何Python使用re模块实现okenizer
2022/04/30 Python