Docz使用總結(jié)

功能特性:

  • 零配置搓劫、簡單易用
  • 高效粟瞬、支持熱加載和代碼分割
  • 易于定制
  • 基于MDX
  • 支持插件
  • 支持Typescript

安裝

yarn add docz docz-theme-default --dev

啟動(dòng)配置

package.json

{
  "name": "sinoui-docs",
  "version": "1.0.0",
  "private": true,
  "license": "MIT",
  "scripts": {
    "docz:dev": "docz dev",
    "docz:build": "docz build",
    "docz:serve": "docz build && docz serve"
  },
  "devDependencies": {
    "docz": "latest",
    "react": "^16.8.2",
    "react-dom": "^16.8.2"
  }
}

然后運(yùn)行

yarn docz:dev

即可啟動(dòng)服務(wù)器同仆。

添加.mdx文檔

Alert.tsx

import React, { SFC } from 'react';
import styled from 'sinoui-components/styles';

export type Kind = 'info' | 'positive' | 'negative' | 'warning';
export type KindMap = Record<Kind, string>;

const kinds: KindMap = {
  info: '#5352ED',
  positive: '#2ED573',
  negative: '#FF4757',
  warning: '#FFA502',
};

export interface AlertProps {
  /**
   * Set this to change alert kind
   * @default info
   */
  kind: 'info' | 'positive' | 'negative' | 'warning';
}

const AlertStyled = styled.div`
  padding: 15px 20px;
  background: white;
  border-radius: 3px;
  color: white;
  background: ${({ kind = 'info' }: AlertProps) => kinds[kind]};
`;

export const Alert: SFC<AlertProps> = ({ kind, ...props }) => (
  <AlertStyled {...props} kind={kind} />
);

Alert.mdx

---
name: Alert  // 左側(cè)導(dǎo)航顯示標(biāo)題
---

import { Playground, Props } from 'docz';
import { Alert } from './Alert';

# Alert

## 效果

<Playground>
  <Alert kind="info">這是提示性文字</Alert>
</Playground>

## 屬性

<Props of={Alert} />

運(yùn)行效果:

mdx.png

自定義配置

支持Typescript

只需要在doczrc.js中配置typescript:true即可嫩码。

doczrc.js

export default {
  title: 'sinoui-docs', //網(wǎng)頁頁簽標(biāo)題
  typescript: true,     // 支持typescript
};

一般在支持typescript時(shí)羔味,可能會(huì)遇到編譯問題啤呼,需要添加onCreateWebpackChain配置

doczrc.js

import { resolve } from 'path';

const srcPath = resolve(__dirname, '../packages');
const nodeModulePath = resolve(__dirname, '../node_modules');

export default {
  title: 'sinoui-docs',
  codeSandbox: false,
  typescript: true,
  onCreateWebpackChain: (config) => {
    config.module
      .rule('ts')
      .include.add(srcPath)
      .end()
      .exclude.add(nodeModulePath)
      .end();

    return config;
  },
};

但是onCreateWebpackChain屬性在V2版本中已經(jīng)棄用晶渠,可使用下面的方式替換:

  1. 首先在根目錄下添加tsconfig.json文件
{
  "include": ["src", "types"],
  "exclude": ["node_modules"],
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "lib": ["dom", "esnext"],
    "importHelpers": true,
    "declaration": true,
    "sourceMap": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "moduleResolution": "node",
    "jsx": "react",
    "esModuleInterop": true,
    "allowJs": false,
    "baseUrl": ".",
    "rootDir": "./src",
    "outDir": "./build",
    "resolveJsonModule": true,
    "incremental": true
  }
}
  1. 在根目錄下添加gatsby-node.js文件
const path = require('path');
const TsconfigPaths = require('tsconfig-paths-webpack-plugin');

const tsConfigFile = path.join(__dirname, '../tsconfig.json');

exports.onCreateWebpackConfig = (args) => {
  args.actions.setWebpackConfig({
    resolve: {
      plugins: [
        new TsconfigPaths({
          configFile: tsConfigFile,
        }),
      ],
    },
    watchOptions: {
      ignored: ['node_modules', 'dist', '.cache', 'coverage', '.docz'],
    },
  });
};

支持自定義站點(diǎn)主題(v1)

使用theme或者themeConfig指定站點(diǎn)主題

doczrc.js

// theme
export default {
  theme: '/src/my/theme/folder', //外部theme文件
}

// themeConfig
export default {
    themeConfig:{
        colors:{
            primary:'red'  //指定站點(diǎn)主題下的主色調(diào)
        }
    }
}

此外還能支持直接對(duì)標(biāo)簽元素的樣式定制

export default {
  themeConfig: {
    styles: {
      h1: `
        font-size: 80px;
        margin-bottom: 10px;
      `
    }
  }
};

支持自定義站點(diǎn)主題(v2)

V2版本中我們要確保移除docz-theme-default的依賴,可使用

yarn remove docz-theme-default  或
npm uninstall docz-theme-default

移除此依賴的主要原因是因?yàn)?code>V2啟動(dòng)了自己的Gatsby主題gatsby-theme-docz鸯檬。具體使用方式如下:
由于doczrc.js中的theme屬性已經(jīng)移除舵稠,如果我們想要使用自定義的主題深员,可以在src下新建gatsby-theme-docz/index.js:

// src/gatsby-theme-docz/index.js
import React from 'react'
import Theme from './my-custom-theme'

export default (props) => <Theme {...props} />

支持自定義應(yīng)用程序包裝器(根節(jié)點(diǎn)組件)

我們?cè)趯懳臋n時(shí)区匠,由于組件使用styled-components干像,所以必須提供統(tǒng)一的ThemeProvider,這個(gè)給我們提供很大的便利性

wrapper.js

import React from 'react';
import defaultTheme from 'sinoui-components/styles/defaultTheme';
import { ThemeProvider } from 'sinoui-components/styles';

export default function Wrapper(props) {
  return <ThemeProvider theme={defaultTheme}>{props.children}</ThemeProvider>;
}

doczrc.js

export default {
  wrapper: 'src/wrapper',
}

這樣我們?cè)趯懯褂脠?chǎng)景時(shí)就不用每次都寫一遍ThemeProvider了。

但是V2版本中wrapper屬性也已經(jīng)移除驰弄,新的處理方式如下:
src下新建gatsby-theme-docz/wrapper.js:

import React from 'react';
import { ThemeProvider } from 'styled-components';
import { defaultTheme, createTheme } from '@sinoui/theme';
import { useThemeUI } from 'theme-ui';
import lightBlue from '@sinoui/theme/colors/lightBlue';

const darkTheme = createTheme({
  palette: {
    type: 'dark',
    primary: lightBlue,
  },
});

export default ({ children }) => {
  const { colorMode } = useThemeUI();
  return (
    <ThemeProvider theme={colorMode === 'dark' ? darkTheme : defaultTheme}>
      <div>{children}</div>
    </ThemeProvider>
  );
};

支持自定義渲染模板

模板替換屬性indexHtml只在V1中有作用麻汰,V2版本已不支持此特性。

docz默認(rèn)渲染模板在移動(dòng)端使用時(shí)戚篙,連擊會(huì)導(dǎo)致屏幕自動(dòng)放大五鲫,為了禁止這種行為,我們可以指定一個(gè)渲染模板替換默認(rèn)模板岔擂。

index.html

<!DOCTYPE html>
<html lang="{{ lang }}">
  <head>
    <meta charset="UTF-8" />
    <meta name="description" content="{{ description }}" />
    <!--設(shè)置移動(dòng)端不支持連擊時(shí)的自動(dòng)縮放 -->
    <meta
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;"
      name="viewport"
    />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>{{ title }}</title>
    {{ head }}
  </head>
  <body>
    <div id="root" />
    {{ footer }}
  </body>
</html>

doczrc.js

export default {
  indexHtml: "index.html"
};

參考文檔:docz

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末位喂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子智亮,更是在濱河造成了極大的恐慌忆某,老刑警劉巖点待,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阔蛉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡癞埠,警方通過查閱死者的電腦和手機(jī)状原,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苗踪,“玉大人颠区,你說我怎么就攤上這事⊥ú” “怎么了毕莱?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我朋截,道長蛹稍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任部服,我火速辦了婚禮唆姐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘廓八。我一直安慰自己奉芦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布剧蹂。 她就那樣靜靜地躺著声功,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宠叼。 梳的紋絲不亂的頭發(fā)上减噪,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音车吹,去河邊找鬼筹裕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窄驹,可吹牛的內(nèi)容都是我干的朝卒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼乐埠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抗斤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丈咐,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤瑞眼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棵逊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伤疙,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辆影,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徒像。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛙讥,死狀恐怖锯蛀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情次慢,我是刑警寧澤旁涤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布翔曲,位于F島的核電站,受9級(jí)特大地震影響劈愚,放射性物質(zhì)發(fā)生泄漏部默。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一造虎、第九天 我趴在偏房一處隱蔽的房頂上張望傅蹂。 院中可真熱鬧,春花似錦算凿、人聲如沸份蝴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婚夫。三九已至,卻和暖如春署鸡,著一層夾襖步出監(jiān)牢的瞬間案糙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工靴庆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留时捌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓炉抒,卻偏偏與公主長得像奢讨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子焰薄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348