美文网首页VueVue.js专区Vue.js开发技巧
cube-ui:基于Vue.js的移动组件库

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

作者: 疾风劲草ccy | 来源:发表于2017-11-12 22:54 被阅读241次

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

    • 首先创建一个vue项目
    vue init webpack my-project
    cd my-project
    npm install
    
    • 安装cube-ui
    npm install cube-ui -S
    
    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-apibetter-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"
      }
    }
    
    1. 修改 .babelrc,依旧依赖babel-plugin-transform-modules
    "plugins": [
      ["transform-runtime"],
      ["transform-modules", {
        "cube-ui": {
          // 注意: 这里的路径需要修改到 src/modules 下
          "transform": "./node_modules/cube-ui/src/modules/${member}",
          "kebabCase": true
        }
      }]
    ]
    
    1. 修改 webpack.base.conf.js
    var PostCompilePlugin = require('webpack-post-compile-plugin')
    module.exports = {
      // ...
      plugins: [
        // ...
        new PostCompilePlugin()
      ]
      // ...
    }
    
    1. 修改 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
    
    helloworld.png
    clicked.png

    感谢浏览,欢迎评论指正,相互学习,转载请标明出处。

    相关文章

      网友评论

        本文标题:cube-ui:基于Vue.js的移动组件库

        本文链接:https://www.haomeiwen.com/subject/joiomxtx.html