加薪攻略之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.添加依赖

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

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

2.添加npm执行脚本

"scripts": {
...
"storybook": "start-storybook -p 6006",
"build-storybook": "build-storybook -c .storybook -o .out"
},

3.添加配置文件

.storybook/config.js

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

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

//.storybook/config.js

import Vue from "vue";
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from "axios";
import '@/utils/prototype'; Vue.config.productionTip = false;
Vue.prototype.$http = axios;
Vue.use(ElementUI, { size: 'mini'}); ...

4.添加必要的webpack配置

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

// .storybook/webpack.config.js

const path = require('path');

module.exports = async ({ config, mode }) => {
function resolve(dir) {
return path.join(__dirname, "..", dir);
}
//设置别名同项目保持一致
config.resolve = {
extensions: [".js", ".vue", ".json", ".jsx"],
alias: {
vue$: "vue/dist/vue.esm.js",
"@": resolve("src"),
"@assets": resolve("src/assets")
}
}; config.module.rules.push({
test: /\.(css|less)$/,
use: ["style-loader", "css-loader","less-loader"],
exclude:/node_modules/
});
return config;
};

5.准备项目中的组件

src/components/Button/index.vue

<template>
<button :class="type" class="btn">
<slot></slot>
</button>
</template> <script>
export default {
name: "HelloWorld",
props: {
type: {
type: String,
default: "default" // default/primary/danger
}
}
};
</script> <style scoped lang="less">
.btn {
border: 1px solid transparent;
background: #fff;
outline: none;
color: #333;
padding: 5px 10px;
}
.default {
border: 1px solid #e3e3e3;
color: #333;
background-color: #fff;
} </style>

6.为组件添加story

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

import { storiesOf } from '@storybook/vue';
import vButton from '../../src/components/Button/index.vue'; storiesOf('Button', module)
.add('with text', () => ({
components: { vButton },
template: '<v-button>Hello Button</v-button>',
}))
.add('with some emoji', () => ({
components: { vButton },
template: '<v-button>

加薪攻略之UI组件库实践—storybook的更多相关文章

  1. 为公司架构一套高质量的 Vue UI 组件库

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

  2. 前端笔记之Vue(四)UI组件库&Vuex&虚拟服务器初识

    一.日历组件 new Date()的月份是从0开始的. 下面表达式是:2018年6月1日 new Date(2018, 5, 1); 下面表达式是:2018年5月1日 new Date(2018, 4 ...

  3. react_app 项目开发 (4)_ React UI 组件库 ant-design 的基本使用

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

  4. 16款优秀的Vue UI组件库推荐

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

  5. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

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

  6. [转载]前端——实用UI组件库

    https://www.cnblogs.com/xuepei/p/7920888.html Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https:/ ...

  7. [转]VUE优秀UI组件库合集

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

  8. 【转】前端——实用UI组件库

    Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

  9. 前端——实用UI组件库

    Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...

随机推荐

  1. 第9.12节 Python中其他文件操作方式

    一. 引言 本章老猿主要介绍了Python 内置io模块的文件操作相关功能,其实除了内置io模块可以进行文件操作外,Python的不同模块还提供了多种文件操作方式,下面简单将这些模块和方法介绍一下. ...

  2. 【.Net Core】 使用 Nginx 发布 .Net Core 3.1 项目至LInux(Centos7)。

    前置博客(博客中使用的项目来自于此): [Docker] .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 .配置swagger (三) 环境:.N ...

  3. 如何实现 token 加密(来自github每日一题)

    需要一个secret(随机数) 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端 前端每次request在header中 ...

  4. 【题解】CIRU - The area of the union of circles [SP8073] \ 圆的面积并 [Bzoj2178]

    [题解]CIRU - The area of the union of circles [SP8073] \ 圆的面积并 [Bzoj2178] 传送门: \(\text{CIRU - The area ...

  5. 【学习笔记】K-D tree 区域查询时间复杂度简易证明

    查询算法的流程 如果查询与当前结点的区域无交集,直接跳出. 如果查询将当前结点的区域包含,直接跳出并上传答案. 有交集但不包含,继续递归求解. K-D Tree 如何划分区域 可以借助下文图片理解. ...

  6. 深入理解Java虚拟机(五)——JDK故障处理工具

    进程状况工具:jps jps(JVM Process Status Tool) 作用 用于虚拟机中正在运行的所有进程. 显示虚拟机执行的主类名称以及这些进程的本地虚拟机唯一ID. 可以通过RMI协议查 ...

  7. Linux 上安装 mysql

    1.通过 yum 命令安装 mysql 可以先通过 yum list |grep mysql 方式查看有哪些版本的 mysql 2.安装 mysql yum install mysql-server ...

  8. JavaSE21-网络编程

    1.网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共 ...

  9. Lua的require小结

    在游戏开发中会经常使用到lua作为游戏逻辑层的脚本语言,各种优势就不说了,虽然平时用的比较多,但对lua语言本身和内部的一些实现并不是很了解,让我们先从lua的require入手来一探require的 ...

  10. 个人微信公众号搭建Python实现 -开发配置和微信服务器转入-配置说明(14.1.2)

    @ 目录 1.查看基本配置 2.修改服务器配置 3.当上面都配置好,点击提交 4.配置如下 1.查看基本配置 登录到微信公众号控制面板后点击基本配置 这里要讲的就是订阅号 前往注册微信公众号 2.修改 ...