加薪攻略之UI组件库实践—storybook
加薪攻略之UI组件库实践—storybook
领导“拍了拍”你,是时候搭建你们团队的 UI 组件文档库了
一、业务背景
项目中抽离的组件较多的时候,没有集中展示出来具体有些什么,而是分布在各个使用的业务场景中。对于新接触项目的开发人员来说,由于不清楚业务场景,考虑复用组件时不是很直观,也不便于后期组件测试,维护和升级。
二、选用方案
目前业界最流行的StoryBook,使用StoryBook——更好地管理我们的UI组件
使用StoryBook的特点:
组件驱动开发,由下至上,从底层组件开始一步步构建界面
隔离开发环境展示组件,无需运行项目
无需关心组件的依赖和要求
隔离UI组件,支持独立调试&测试,统一展示项目组件库。
三、引入分析
由于原有项目技术栈为: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的更多相关文章
- 为公司架构一套高质量的 Vue UI 组件库
有没有曾遇过,产品要我们实现一个功能,但是 iview 或者 elementui 不支持,我们然后义正言辞的说,不好意思,组件库不支持,没法做到. 有没有曾和设计师争论得面红耳赤,其实也是因为组件库暂 ...
- 前端笔记之Vue(四)UI组件库&Vuex&虚拟服务器初识
一.日历组件 new Date()的月份是从0开始的. 下面表达式是:2018年6月1日 new Date(2018, 5, 1); 下面表达式是:2018年5月1日 new Date(2018, 4 ...
- react_app 项目开发 (4)_ React UI 组件库 ant-design 的基本使用
最流行的开源 React UI 组件库 material-ui 国外流行(安卓手机的界面效果)文档 ant-design 国内流行 (蚂蚁金服 设计,一套 PC.一套移动端的____下拉菜单.分页.. ...
- 16款优秀的Vue UI组件库推荐
16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基 ...
- vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...
- [转载]前端——实用UI组件库
https://www.cnblogs.com/xuepei/p/7920888.html Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https:/ ...
- [转]VUE优秀UI组件库合集
原文链接 随着SPA.前后端分离的技术架构在业界越来越流行,前端的业务复杂度也越来越高,导致前端开发者需要管理的内容,承担的职责越来越多,这一切,使得业界对前端开发方案的思考多了很多,以react.v ...
- 【转】前端——实用UI组件库
Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...
- 前端——实用UI组件库
Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...
随机推荐
- 【.Net Core】 使用 Nginx 发布 .Net Core 3.1 项目至LInux(Centos7)。
前置博客(博客中使用的项目来自于此): [Docker] .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 .配置swagger (三) 环境:.N ...
- 【系统设计】WMS系统中 库存、盘点、移库、拆库功能的设计(库内管理)
最近负责WMS系统 盘点 移库 两个功能模块的功能及数据库设计. 物流仓储系统的搭建,要基于仓库的实际情况,整理内部员工需求,再参考其他WMS系统,经过长时间的讨论和研究,最终转化为产品需求. 这里先 ...
- msfvenom命令自动补全工具下载=>msfvenom-zsh-completion
msfvenom参数和命令很多,各种payload和encoder经常让⼈眼花缭乱,特别是对英语不好的⼈来说有些命令可能很容易忘记. 所以 Green_m 开发了⼀个zsh插件,可以⾃动化的补全msf ...
- Proxy:简单小巧又强大好用的代理系统
之前的文章介绍了许多我们在用的DevOps相关的工具系统,例如:方便创建多套运行环境的Alodi,对运维友好的配置中心Kerrigan,强大的自定义任务引擎Probius以及专注于数据库自动化的ove ...
- URLEncoder使用踩坑
URLEncoder使用 背景介绍 今天需要传一些描述信息给前端,需要写在header里面,所以要先编码成utf-8的格式,再有前端解码获取. 工作过程 前提:我要传给前端的文字是我从中台那边拿到的. ...
- NOIP2017 D1T3 逛公园
发现 \(K\) 很小,不妨设置一个 \(O(NK)\) 的 \(DP\). 发现可行的最短路必须满足是 \(d <= dis <= d + K\). 由逆向思维,则是从某点出发,可以消耗 ...
- MySQL的验证方式
mysql8之后root用户的密码验证方式修改了,mysql8的加密方式为caching_sha2_passoword,而navicat连接所用的方式为native_password. 使用命令mys ...
- vue2中$emit $on $off实现组件之间的联动,绝对有你想了解的
在vue2开发中,你肯定会遇到组件之间联动的问题,现在我们就来说说哪个神奇的指令可以满足我们的需求. 一.先上实例: 需求:点击A组件或者B组件可以使C组件的名称相应发生改变,同样,点击A组件也会使对 ...
- oracle DG搭建
Oracle DG 搭建1. 环境 OS IP hostname db_name DB_UNIQUE_NAME主库 RHEL 5.4 192.168.12.20 edgzrip1.oracle.com ...
- pyhon 自动化 logger
#!/Users/windows8.1/PycharmProjects/pythonapi# @Software: PyCharm Community Edition# -*- coding: utf ...