#默认配置 Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他相似于建立一个react app的配置,并通过调整(tweaked ),使其与vue cli的webpack配置很是类似 开始学习Storybook配置css
学习内容(Table of Contents) - Babel ES2016+ Support babelrc support - Webpack CSS Support Image and Static File Support JSON Loader - NPM Moduleshtml
###Babel 咱们用Babel来转换es6语法,下面是一些Storybook’s Babel 配置的关键点: ES2016+ Support 咱们已经添加了ES2016 支持,除此以外(In addition to that),咱们还添加了一些实验性(experimental )的功能,好比对象扩展和异步等待,检查咱们的资源来学习更多的插件 .babelrc support 若是你的项目已经有了.babelrc文件,咱们会用你的.babelrc文件替换咱们的.babelrc文件,因此你能够在你的项目中使用任何babel插件和presetsvue
##Webpack 咱们使用webpack来管理和加载js模块,咱们已经添加了一些比较不错的webpack配置, CSS Support 你能够随意的引入css文件,无论这个css文件在哪里 基本上(Basically),你能够这样引入css文件:node
// from NPM modules import 'bootstrap/dist/css/bootstrap.css'; // from local path import './styles.css';
注意:这只是引入css文件,若是你想引入sass less这种,你须要配置webpack 警告:使用Angular脚手架的storybook默认不支持引入css,必须先配置webpack,或者使用内联的引入语法:
import '!style-loader!css-loader!./styles.css';
react
###Image and Static File Support 你也可使用js引入图片或视频,以下:webpack
import React from 'react'; import { storiesOf } from '@storybook/react'; import imageFile from './static/image.png'; storiesOf('<img />', module) .add('with a image', () => ( <img src={imageFile} alt="covfefe" /> ));
当你开始构建storybook的时候,咱们也会将你引入的图片导出,因此,这是一个很是不错的方法(approach )去引入你的静态资源es6
###JSON Loader 你能够导入json格式文件,就像node.js作的同样,这还容许您使用NPM项目,该项目将在其中导入.json文件。 NPM Modules 支持nmp包web
#webpack配置typescript
###Default mode 下面是咱们提供一个webpack.config.js文件,该文件使用commonjs module风格导出一些webpack 4的配置npm
###Extend Mode 你能够经过返回一个对象来生成一个扩展配置 好比说(Let’s say)你想添加一个sass支持在你的sorybook项目中,那该怎么作呢(This is how to do it),把下面的内容放在你的webpack.config.js文件中,默认在.storybook文件夹下面
const path = require("path"); module.exports = { module: { rules: [ { test: /\.scss$/, loaders: ["style-loader", "css-loader", "sass-loader"], include: path.resolve(__dirname, "../") } ] } };
由于这个webpack.config.js文件已经在你的storybook目录中,你须要设置包含路径,若是你的配置文件在其余的目录,对应的上面的代码的路径地方你要改一下 你也能够像上面同样去导入style、css、sass等loader
一旦你建立好webpack.config.js文件,storybook不会再引入默认的webpack.config.js文件了,可是对于babel loader仍是使用默认的,使用你本身的webpack.config.js也会致使一些引入功能失效,好比svg引入,在下面会说明如何保持以前的引入规则
###Supported Webpack Options 你能够在上面的代码总添加任何种类的webpack配置,不管是plugins, loaders, or aliases,可是你不会下面的配置选项: -entry -output -js loader with babel
对于高级用法,咱们强烈推荐全控制模式 ###Full Control Mode 有时候,你想对于wbepack配置文件有一个彻底的控制,也许你想为你的开发环境添加一个不一样的配置文件,你可使用咱们的全控制模式.
为了实现它,你须要导出一个方法在上面的代码中:
const path = require("path"); // Export a function. Accept the base config as the only param. module.exports = (storybookBaseConfig, configType) => { // configType has a value of 'DEVELOPMENT' or 'PRODUCTION' // You can change the configuration based on that. // 'PRODUCTION' is used when building the static version of storybook. // Make whatever fine-grained changes you need storybookBaseConfig.module.rules.push({ test: /\.scss$/, loaders: ["style-loader", "css-loader", "sass-loader"], include: path.resolve(__dirname, "../") }); // Return the altered config return storybookBaseConfig; };
storybook使用上面方法中返回的配置,因此,请当心的(with care)编辑storybookBaseConfig ,确保下面的选项必定要存在: -entry -output -first loader in the module.loaders (Babel loader for JS) -all existing plugins 若是你的自定义的webpack配置文件使用了一个没有显示指明引用文件扩展名的loader,那颇有必要从该加载程序中排除(exclude).ejs文件扩展名
###Full control mode + default 也许你但愿保持storybook默认的webpack配置,而后只须要扩展他,若是这样的话,在使用全控制模式下,将下面的内容放到你的webpack配置文件中:
const path = require("path"); module.exports = (baseConfig, env, defaultConfig) => { // Extend defaultConfig as you need. // For example, add typescript loader: defaultConfig.module.rules.push({ test: /\.(ts|tsx)$/, include: path.resolve(__dirname, "../src"), loader: require.resolve("ts-loader") }); defaultConfig.resolve.extensions.push(".ts", ".tsx"); return defaultConfig; };
###使用已存在的配置(Using Your Existing Config) 也许你已经有一个已经存在的webpack配置,因此你须要拷贝一些配置而后粘贴到你的webpack.config.js中 可是你不须要这样作,你能够向下面那样作:
-在你的webpack配置文件中引入那个已存在的webpack配置文件,而后使用里面的loader和plugins
#自定义的Babel配置 Storybook默认会加载本身的.babelrc文件而后加载里面的配置,可是有时候一些配置可能会致使storybook报错 在那种状况下,你能够提供一个本身的.babelrc文件,你只须要建立一个文件名字叫.babelrc放在.storybook目录里就行了 而后storybook只会加载你的那个.babelrc文件
#自定义html头 有时候,你可能须要在html头部加载不一样的标签,这对于添加web字体或一些外部脚本很是有用。 很容易实现这些,只须要建立一个文件叫preview-head.html,在.storybook目录里,而后在文件里面写一些标签:
<script src="https://use.typekit.net/xxxyyy.js"></script> <script>try{ Typekit.load(); } catch(e){ }</script>
这样,Storybook 就会包含这些标签
注意:storybook只会将这些标签放在iframe 里面,而不会放在主UI界面中
###添加标签到主UI上 此外,你可能须要添加不一样的scripts或者标签到主ui上,当您的自定义Webpack配置输出或须要额外的块时,可能会出现(arise)这种状况 建立一个文件叫manager-head.html放在.storybook目录里
注意:你的scripts脚本可能会运行在主UI上,也要注意(aware),这是一个不一样寻常的方案可能会使主ui挂掉,因此请当心使用
#使用环境变量
有时候,咱们须要使用环境变量,好比说主题颜色,一些客户端的秘钥,或者一个json字符串,咱们一般倾向于硬编码他们 可是你须要显示的配置这些环境变量,你须要在环境变量前加上STORYBOOK_前缀 好比,咱们向下面这样声明两个环境变量: STORYBOOK_THEME=red STORYBOOK_DATA_KEY=12345 npm run storybook
而后咱们能够在js代码中获取这些环境变量
const out = console; out.log(process.env.STORYBOOK_THEME); out.log(process.env.STORYBOOK_DATA_KEY);
虽然(Even though)咱们能够获取这些环境变量在任何地方,你最好只在stories 或者Storybook配置文件里面使用它
###Build time environment variables 你也能够传递这些环境变量当你使用build-storybook来构建你的storybook 的时候 然会他们会被硬编码到你的storybook静态版本中
###NODE_ENV env variable 注意上面的加前缀的环境变量,你也可使用NODE_ENV 做为环境变量,可是,一般你不须要这样作,由于咱们已经帮你作好了 -当运行npm run storybook时候,咱们会设置NODE_ENV 为 ‘development’ -当构建storybook的时候,咱们会设置NODE_ENV 为production
#脚手架选项 Storybook 附带两个使用工具,他们是start-storybook和build-storybook 这里有一些选项你能够传递他们去修改storybook的行为,咱们在以前的文档中已经看到过了 下面是全部的选项 ###对于start-storybook
Usage: start-storybook [options] Options: --help 输出有用的信息 -V, --version 输出版本号 -p, --port [number] 设置storybook运行的端口号 -h, --host [string] 设置storybook运行的host -s, --static-dir <dir-names> 设置加载静态资源的目录,以逗号分隔(comma-separated list) -c, --config-dir [dir-name] 设置加载storybook配置文件的目录 --https 使用https运行storybook,注意:你必须提供你的证书信息 --ssl-ca <ca> 提供权威的ssl证书 --ssl-cert <cert> 提供ssl证书 --ssl-key <key> 提供ssl秘钥 --smoke-test 成功启动后退出 --ci CI模式() --quiet 禁止(Suppress ) 冗长(verbose )的输出信息
###对于build-storybook
Usage: build-storybook [options] Options: -h, --help 输出有用的信息 -V, --version 输出版本号 -s, --static-dir <dir-names> 加载静态资源的目录,以逗号隔开(comma-separated list) -o, --output-dir [dir-name] storybook构建输出的目录 -c, --config-dir [dir-name] 设置加载storybook配置文件的目录 -w, --watch 观察模式