默认配置

Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他类似于创建一个react app的配置,并经过调整(tweaked ),使其与vue cli的webpack配置非常相似

开始学习Storybook配置

学习内容(Table of Contents)

- Babel

ES2016+ Support

babelrc support

- Webpack

CSS Support

Image and Static File Support

JSON Loader

- NPM Modules

Babel

我们用Babel来转换es6语法,下面是一些Storybook’s Babel 配置的关键点:

ES2016+ Support

我们已经添加了ES2016 支持,除此之外(In addition to that),我们还添加了一些实验性(experimental )的功能,比如对象扩展和异步等待,检查我们的资源来学习更多的插件

.babelrc support

如果你的项目已经有了.babelrc文件,我们会用你的.babelrc文件替换我们的.babelrc文件,所以你可以在你的项目中使用任何babel插件和presets

Webpack

我们使用webpack来管理和加载js模块,我们已经添加了一些比较不错的webpack配置,

CSS Support

你可以随意的引入css文件,不管这个css文件在哪里

基本上(Basically),你可以这样引入css文件:

  1. // from NPM modules
  2. import 'bootstrap/dist/css/bootstrap.css';
  3. // from local path
  4. import './styles.css';

注意:这只是引入css文件,如果你想引入sass less这种,你需要配置webpack

警告:使用Angular脚手架的storybook默认不支持引入css,必须先配置webpack,或者使用内联的引入语法:

import '!style-loader!css-loader!./styles.css';

Image and Static File Support

你也可以使用js引入图片或视频,如下:

  1. import React from 'react';
  2. import { storiesOf } from '@storybook/react';
  3. import imageFile from './static/image.png';
  4. storiesOf('<img />', module)
  5. .add('with a image', () => (
  6. <img src={imageFile} alt="covfefe" />
  7. ));

当你开始构建storybook的时候,我们也会将你引入的图片导出,所以,这是一个非常不错的方法(approach )去引入你的静态资源

JSON Loader

你可以导入json格式文件,就像node.js做的一样,这还允许您使用NPM项目,该项目将在其中导入.json文件。

NPM Modules

支持nmp包

webpack配置

Default mode

下面是我们提供一个webpack.config.js文件,该文件使用commonjs module风格导出一些webpack 4的配置

Extend Mode

你可以通过返回一个对象来生成一个扩展配置

比如说(Let’s say)你想添加一个sass支持在你的sorybook项目中,那该怎么做呢(This is how to do it),把下面的内容放在你的webpack.config.js文件中,默认在.storybook文件夹下面

  1. const path = require("path");
  2. module.exports = {
  3. module: {
  4. rules: [
  5. {
  6. test: /\.scss$/,
  7. loaders: ["style-loader", "css-loader", "sass-loader"],
  8. include: path.resolve(__dirname, "../")
  9. }
  10. ]
  11. }
  12. };

因为这个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配置文件有一个完全的控制,也许你想为你的开发环境添加一个不同的配置文件,你可以使用我们的全控制模式.

为了实现它,你需要导出一个方法在上面的代码中:

  1. const path = require("path");
  2. // Export a function. Accept the base config as the only param.
  3. module.exports = (storybookBaseConfig, configType) => {
  4. // configType has a value of 'DEVELOPMENT' or 'PRODUCTION'
  5. // You can change the configuration based on that.
  6. // 'PRODUCTION' is used when building the static version of storybook.
  7. // Make whatever fine-grained changes you need
  8. storybookBaseConfig.module.rules.push({
  9. test: /\.scss$/,
  10. loaders: ["style-loader", "css-loader", "sass-loader"],
  11. include: path.resolve(__dirname, "../")
  12. });
  13. // Return the altered config
  14. return storybookBaseConfig;
  15. };

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配置文件中:

  1. const path = require("path");
  2. module.exports = (baseConfig, env, defaultConfig) => {
  3. // Extend defaultConfig as you need.
  4. // For example, add typescript loader:
  5. defaultConfig.module.rules.push({
  6. test: /\.(ts|tsx)$/,
  7. include: path.resolve(__dirname, "../src"),
  8. loader: require.resolve("ts-loader")
  9. });
  10. defaultConfig.resolve.extensions.push(".ts", ".tsx");
  11. return defaultConfig;
  12. };

使用已存在的配置(Using Your Existing Config)

也许你已经有一个已经存在的webpack配置,所以你需要拷贝一些配置然后粘贴到你的webpack.config.js中

但是你不需要这样做,你可以向下面那样做:

  1. -在你的webpack配置文件中引入那个已存在的webpack配置文件,然后使用里面的loaderplugins

自定义的Babel配置

Storybook默认会加载自己的.babelrc文件然后加载里面的配置,但是有时候一些配置可能会导致storybook报错

在那种情况下,你可以提供一个自己的.babelrc文件,你只需要创建一个文件名字叫.babelrc放在.storybook目录里就好了

然后storybook只会加载你的那个.babelrc文件

自定义html头

有时候,你可能需要在html头部加载不同的标签,这对于添加web字体或一些外部脚本非常有用。

很容易实现这些,只需要创建一个文件叫preview-head.html,在.storybook目录里,然后在文件里面写一些标签:

  1. <script src="https://use.typekit.net/xxxyyy.js"></script>
  2. <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代码中获取这些环境变量

  1. const out = console;
  2. out.log(process.env.STORYBOOK_THEME);
  3. 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

  1. Usage: start-storybook [options]
  2. Options:
  3. --help 输出有用的信息
  4. -V, --version 输出版本号
  5. -p, --port [number] 设置storybook运行的端口号
  6. -h, --host [string] 设置storybook运行的host
  7. -s, --static-dir <dir-names> 设置加载静态资源的目录,以逗号分隔(comma-separated list)
  8. -c, --config-dir [dir-name] 设置加载storybook配置文件的目录
  9. --https 使用https运行storybook,注意:你必须提供你的证书信息
  10. --ssl-ca <ca> 提供权威的ssl证书
  11. --ssl-cert <cert> 提供ssl证书
  12. --ssl-key <key> 提供ssl秘钥
  13. --smoke-test 成功启动后退出
  14. --ci CI模式()
  15. --quiet 禁止(Suppress ) 冗长(verbose )的输出信息

对于build-storybook

  1. Usage: build-storybook [options]
  2. Options:
  3. -h, --help 输出有用的信息
  4. -V, --version 输出版本号
  5. -s, --static-dir <dir-names> 加载静态资源的目录,以逗号隔开(comma-separated list)
  6. -o, --output-dir [dir-name] storybook构建输出的目录
  7. -c, --config-dir [dir-name] 设置加载storybook配置文件的目录
  8. -w, --watch 观察模式

storybook配置之基本配置和webpack配置的更多相关文章

  1. webpack 配置 Vue 多页应用 —— 从入门到放弃

    webpack 配置 Vue 多页应用 -- 从入门到放弃 一直以来,前端享有无需配置,一个浏览器足矣的优势,直到一大堆构建工具的出现,其中 webpack 就是其中最复杂的一个,因此出现了一个新兴职 ...

  2. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  3. webpack配置备份

    package.json: { "name": "webpackTest", "version": "1.0.0", & ...

  4. webpack配置详解

    webpack配置详解 先点个赞吧,再挨个点下面的连接,觉得不值这个赞的回来骂我啊. Webpack傻瓜式指南(一) Webpack傻瓜指南(二)开发和部署技巧 Webpack傻瓜式指南 原生的官网详 ...

  5. Webpack配置示例和详细说明

    /* * 请使用最新版本nodejs * 默认配置,是按生产环境的要求设置,也就是使用 webpack -p 命令就可以生成正式上线版本. * 也可以使用 webpack -d -w 命令,生成用于开 ...

  6. vue-cli#2.0 webpack 配置分析

    目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-s ...

  7. webpack配置这一篇就够

    最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...

  8. webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema

    最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可

  9. 前端工程化(二)---webpack配置

    导航 前端工程化(一)---工程基础目录搭建 前端工程化(二)---webpack配置 前端工程化(三)---Vue的开发模式 前端工程化(四)---helloWord 继续上一遍的配置,本节主要记录 ...

随机推荐

  1. vue页面传参

    1.传的参数是数组 传递参数的页面 let setStr = encodeURIComponent(JSON.stringify(this.tableData)); this.$router.push ...

  2. 记一次Linux服务器因redis漏洞的挖矿病毒入侵

    中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...

  3. 微信公众平台开发教程(三)_OAuth2.0认证

    一.微信授权认证 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权的两种scope的区别说明 1.以snsapi_base为s ...

  4. AL32UTF8 and UTF8 and ZHS16GBK

    About AL32UTF8 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support), 或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数 ...

  5. [Android] 对于com.google.gson.JsonElement的转义问题

    不多说了,com.google.gson.JsonElement使用的时候,toString()跟getAsString()这两个方法对于特殊字符的转义是不同的, 看这里的解释: https://st ...

  6. python精进之路 -- open函数

    下面是python中builtins文件里对open函数的定义,我将英文按照我的理解翻译成中文,方便以后查看. def open(file, mode='r', buffering=None, enc ...

  7. turtle画王思聪吃热狗(杨艳春,何金凝小组)

    点击此处查看视频:http://v.douyin.com/RCY8GD/import turtle as t t.setup(450,300) t.pensize(4) t.color('black' ...

  8. eclipse发布到tomcat

    1.用maven集成的工程,在发布的时候,发现其中的变量没有改变,类似${}不存在之类 解决方式:这个类问题是由于缓存导致,基本方法就是clean一下,重启eclipse,最后不行重启电脑 2.今天遇 ...

  9. cnetos7设置中文显示及中文输入法

    Centos7安装的时候即使选择了中文安装,因为安装后并没有GUI,即使后来安装GUI后默认依旧是英文显示. 输入locale后显示的是 永久修改成中文:编辑/etc/profile.d/lang.s ...

  10. Fizz Buzz 面试题

    在CSDN上看到一篇文章<软件工程师如何笑着活下去>,本来是想看对这个行业的一些评价和信息,不曾检索到关于Fizz Buzz的面试题,上网搜了一下,顿感兴趣.留下此文,以表回忆. java ...