加薪攻略之UI组件库实践—storybook

领导“拍了拍”你,是时候搭建你们团队的 UI 组件文档库了

一、业务背景

项目中抽离的组件较多的时候,没有集中展示出来具体有些什么,而是分布在各个使用的业务场景中。对于新接触项目的开发人员来说,由于不清楚业务场景,考虑复用组件时不是很直观,也不便于后期组件测试,维护和升级。

二、选用方案

目前业界最流行的StoryBook,使用StoryBook——更好地管理我们的UI组件

使用StoryBook的特点:

组件驱动开发,由下至上,从底层组件开始一步步构建界面

隔离开发环境展示组件,无需运行项目

无需关心组件的依赖和要求

隔离UI组件,支持独立调试&测试,统一展示项目组件库。

使用效果

Storybook官网

三、引入分析

由于原有项目技术栈为:vue+elementui+less, 可以参考Vue版的官方指南进行安装,经过一番实践,看了很多文章,也踩了很多坑,终于总结了以下步骤,可以更好的适配我们的项目和无侵入式引入storybook。

项目结构

项目效果

四、实现步骤

  • install storybook 依赖
  • 新建storybook配置文件./storybook/config.js,添加相关配置,加载组件的stories
  • 为storybook的组件运行添加对应的webpack配置(./storybook/webpack.config.js)
  • 为组件添加story(即xxx.stories.js)
  • 运行storybook

1.添加依赖

  1. npm install @storybook/vue --save-dev
  2. npm install vue-loader@15.3.0 style-loader css-loader less-loader --save-dev

(注意vue-loader的版本在15以上,配合webpack4使用)

2.添加npm执行脚本

  1. "scripts": {
  2. ...
  3. "storybook": "start-storybook -p 6006",
  4. "build-storybook": "build-storybook -c .storybook -o .out"
  5. },

3.添加配置文件

.storybook/config.js

  1. import { addParameters,configure } from '@storybook/vue';
  2. function loadStories() {
  3. /*根据特定的文件名加载stories,在这个例子,用xxx.stories.js命名文件*/
  4. const req = require.context('./stories', true, /\.stories\.js$/);
  5. req.keys().forEach(filename => req(filename));
  6. }
  7. addParameters({
  8. options: {
  9. panelPosition: 'right' //操作面板在右边
  10. },
  11. })
  12. configure(loadStories, module);

根据项目情况,同样在以上文件中,做一些和项目中 main.js 相似的初始化工作:

  1. //.storybook/config.js
  2. import Vue from "vue";
  3. import ElementUI from 'element-ui';
  4. import 'element-ui/lib/theme-chalk/index.css';
  5. import axios from "axios";
  6. import '@/utils/prototype';
  7. Vue.config.productionTip = false;
  8. Vue.prototype.$http = axios;
  9. Vue.use(ElementUI, { size: 'mini'});
  10. ...

4.添加必要的webpack配置

创建文件 .storybook/webpack.config.js

  1. // .storybook/webpack.config.js
  2. const path = require('path');
  3. module.exports = async ({ config, mode }) => {
  4. function resolve(dir) {
  5. return path.join(__dirname, "..", dir);
  6. }
  7. //设置别名同项目保持一致
  8. config.resolve = {
  9. extensions: [".js", ".vue", ".json", ".jsx"],
  10. alias: {
  11. vue$: "vue/dist/vue.esm.js",
  12. "@": resolve("src"),
  13. "@assets": resolve("src/assets")
  14. }
  15. };
  16. config.module.rules.push({
  17. test: /\.(css|less)$/,
  18. use: ["style-loader", "css-loader","less-loader"],
  19. exclude:/node_modules/
  20. });
  21. return config;
  22. };

5.准备项目中的组件

src/components/Button/index.vue

  1. <template>
  2. <button :class="type" class="btn">
  3. <slot></slot>
  4. </button>
  5. </template>
  6. <script>
  7. export default {
  8. name: "HelloWorld",
  9. props: {
  10. type: {
  11. type: String,
  12. default: "default" // default/primary/danger
  13. }
  14. }
  15. };
  16. </script>
  17. <style scoped lang="less">
  18. .btn {
  19. border: 1px solid transparent;
  20. background: #fff;
  21. outline: none;
  22. color: #333;
  23. padding: 5px 10px;
  24. }
  25. .default {
  26. border: 1px solid #e3e3e3;
  27. color: #333;
  28. background-color: #fff;
  29. }
  30. </style>

6.为组件添加story

创建 .storybook/stories/button.stories.js

  1. import { storiesOf } from '@storybook/vue';
  2. import vButton from '../../src/components/Button/index.vue';
  3. storiesOf('Button', module)
  4. .add('with text', () => ({
  5. components: { vButton },
  6. template: '<v-button>Hello Button</v-button>',
  7. }))
  8. .add('with some emoji', () => ({
  9. components: { vButton },
  10. template: '<v-button>
  11. 加薪攻略之UI组件库实践—storybook的更多相关文章

      1. 为公司架构一套高质量的 Vue UI 组件库
      1. 有没有曾遇过,产品要我们实现一个功能,但是 iview 或者 elementui 不支持,我们然后义正言辞的说,不好意思,组件库不支持,没法做到. 有没有曾和设计师争论得面红耳赤,其实也是因为组件库暂 ...

      1. 前端笔记之Vue(四)UI组件库&Vuex&虚拟服务器初识
      1. 一.日历组件 new Date()的月份是从0开始的. 下面表达式是:2018年6月1日 new Date(2018, 5, 1); 下面表达式是:2018年5月1日 new Date(2018, 4 ...

      1. react_app 项目开发 (4)_ React UI 组件库 ant-design 的基本使用
      1. 最流行的开源 React UI 组件库 material-ui 国外流行(安卓手机的界面效果)文档 ant-design 国内流行 (蚂蚁金服 设计,一套 PC.一套移动端的____下拉菜单.分页.. ...

      1. 16款优秀的Vue UI组件库推荐
      1. 16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基 ...

      1. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
      1. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

      1. [转载]前端——实用UI组件库
      1. https://www.cnblogs.com/xuepei/p/7920888.html Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https:/ ...

      1. [转]VUE优秀UI组件库合集
      1. 原文链接 随着SPA.前后端分离的技术架构在业界越来越流行,前端的业务复杂度也越来越高,导致前端开发者需要管理的内容,承担的职责越来越多,这一切,使得业界对前端开发方案的思考多了很多,以react.v ...

      1. 【转】前端——实用UI组件库
      1. Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

      1. 前端——实用UI组件库
      1. Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

    1. 随机推荐

        1. PyQt(Python+Qt)学习随笔:QListView的gridSize属性
        1. 老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的gridSize属性用于控制视图中数据项排列所在网格的大小,gridSize默认 ...

        1. JDBC(一)—— JDBC概述
        1. Jdbc概述 Java DataBase connectivity(Java语言连接数据库) Jdbc本质是什么? 是Sun公司制定的一套接口,java.sql.* 接口都有调用者和实现者 面向接口调 ...

        1. 软工团队作业--Scrum冲刺集合贴
        1. 软工团队作业--Scrum冲刺集合贴 团队 团队名称:广东靓仔六强选手 团队成员: 黄清山 黄梓浩 钟俊豪 周立 邓富荣 郑焕 博客链接 Scrum 冲刺 第一篇 Scrum 冲刺 第二篇 Scrum ...

        1. Srcum冲刺_Day05
        1. 一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ...

        1. 手把手教你写DI_0_DI是什么?
        1. DI是什么? Dependency Injection 常常简称为:DI. 它是实现控制反转(Inversion of Control – IoC)的一个模式. fowler 大大大神 "几 ...

        1. Nodepad++ 没有TextFX Characters插件
        1. Nodepad++ 没有TextFX Characters插件 原因:从6.5以上的某个版本开始,就没有了默认的这个插件. 我试了最新的版本下载插件也不行,只好下载一个6.4.5的版本,再更新插件管理 ...

        1. python协程需要注意的
        1. python协程需要注意的点 都在注释里 # -*- coding: utf-8 -*- import asyncio import time from geeker import schedule ...

        1. mysql 8.0 改变数据目录和日志目录(二)
        1. 一.背景 原数据库数据目录:/data/mysql3306/data,日志文件目录:/data/mysql3306/binlog 变更后数据库目录:/mysqldata/3306/data,日志文件目 ...

        1. postgresql 运行sql文件
        1. 方法一: [postgres@node01 ~]$ psql -Upostgres postgres=# \l List of databases Name | Owner | Encoding | ...

        1. 服务器标配 SSH 协议,你了解多少?
        1. 年初,新冠肺炎疫情的出现,全国数千万名员工在家远程办公,使用个人设备通过家庭网络访问公司资料.因此,IT 安全团队面临了众多新挑战:如何实施更加安全的身份验证方案,以确保只有授权人员和设备才能访问公司 ...