一、storybook 介紹
storybook
storybook是一個(gè)開(kāi)源的組件管理、文檔UI展示工具,用來(lái)在大型的項(xiàng)目中,讓團(tuán)隊(duì)成員一個(gè)可以知道到團(tuán)隊(duì)已開(kāi)發(fā)的組件,避免編寫(xiě)重復(fù)的組件,減少團(tuán)隊(duì)溝通時(shí)間和開(kāi)發(fā)成本
一、storybook 環(huán)境搭建
1. 依賴(lài)安裝
npm install @storybook/vue --save-dev
npm install vue-loader vue-template-compiler @babel/core babel-loader babel-preset-vue --save-dev
2.入口配置
在項(xiàng)目根目錄新建 .storybook/config.js 文件
##.storybook/config.js#
import { configure } from '@storybook/vue'
// 加載所有的組件故事
configure(require.context('./stories', true, /\.js$/), module)
3.自定義wepback配置
在項(xiàng)目根目錄新建 .storybook/webpack.config.js 文件
// 在這里你可以重寫(xiě)storybook 默認(rèn)的webpack配置
module.exports = async ({ config, mode }) => {
// `mode` has a value of 'DEVELOPMENT' or 'PRODUCTION'
// 新加less語(yǔ)法加載器
config.module.rules.push({
test: /\.less$/,
use: ["style-loader", "css-loader", "less-loader", {
loader: 'style-resources-loader',
options: {
patterns: [
path.resolve(__dirname, '../src/assets/style/common/mixins.less')
]
}
}]
})
// 新增@別名
config.resolve.alias = Object.assign(config.resolve.alias, {
'@': path.resolve(__dirname, '../src')
})
// Return the altered config
return config
}
4.ajax跨域代理
在項(xiàng)目根目錄新建 .storybook/middleware.js 文件
const proxy = require('http-proxy-middleware')
module.exports = function expressMiddleware(router) {
router.use(
'/api',
proxy({
target: `http://locahost:5000`, // 服務(wù)器 api地址
changeOrigin: true
})
)
5.相關(guān)插件介紹和使用
1. knobs
Knobs
knobs插件提供一個(gè)表單控制臺(tái),用戶(hù)可以通過(guò)表單控制臺(tái)來(lái)改變組件相關(guān)屬性,展示不同屬性下的組件
2.actions
actions
actions插件讓用戶(hù)在對(duì)組件的操作,可以反應(yīng)在底部的日志里面
3.storysource
storysource
addon插件可以讓你直接在界面上看到當(dāng)前sotry的源碼
4.docs
docs
addon-docs插件讓你可以為你的組件編寫(xiě)文檔
5.插件引入
安裝相關(guān)依賴(lài)
npm install @storybook/addon-knobs @storybook/addon-actions @storybook/addon-storysource @storybook/addon-docs --dev
在項(xiàng)目根目錄新建 .storybook/addons.js 文件
import '@storybook/addon-knobs/register';
import '@storybook/addon-actions/register';
import '@storybook/addon-storysource/register';
import '@storybook/addon-docs/register';
6.展示自己的組件
在項(xiàng)目根目錄下的stories文件夾中,新建一個(gè)任意名稱(chēng)的js文件
import Vue from 'vue';
// 這里導(dǎo)入你自己的組件,
import MyButton from '@/components/Button.vue';
export default { title: 'Button' };
export const withText = () => '<my-button>with text</my-button>';
export const withEmoji = () => '<my-button>?? ?? ?? ??</my-button>';
export const asAComponent = () => ({
components: { MyButton },
template: '<my-button :rounded="true">rounded</my-button>'
});
最后在根目錄命令行啟動(dòng)storybook就搞定了
npm run storybook