From 0019414bed1150f7dd8950b0167b1886609e831a Mon Sep 17 00:00:00 2001 From: Pu Wei Date: Thu, 7 Mar 2019 22:25:01 +0800 Subject: [PATCH] feat: add doc deploy (#2067) * feat: add doc deploy * feat: add doc deploy --- packages/umi-library/README.md | 8 ++++++- packages/umi-library/package.json | 1 + packages/umi-library/src/doc.ts | 35 +++++++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/packages/umi-library/README.md b/packages/umi-library/README.md index 3a21d679dec6..f8f571f308bb 100644 --- a/packages/umi-library/README.md +++ b/packages/umi-library/README.md @@ -39,6 +39,9 @@ $ umi-lib doc dev # build doc $ umi-lib doc build + +# deploy doc to github.io +$ umi-lib doc deploy ``` ## Cli @@ -69,6 +72,7 @@ doc 包含 dev 和 build 两个子命令。 ```bash $ umi-lib doc dev $ umi-lib doc build +$ umi-lib doc deploy ``` 所有的命令行参数会透传给 docz,详见 [docz.site#project-configuration](https://www.docz.site/documentation/project-configuration)。 @@ -76,6 +80,7 @@ $ umi-lib doc build 注: 1. 不能传 `--config` 参数,通过 `--config` 指定的文件内容可全部配置在 `.umirc.library.js` 的 [doc](#doc) 配置里。 +2. 使用 `deploy` 之前请先执行 `build` 命令,文档部署后域名为:`https://yourname.github.io/your-repo`。 ## Config @@ -87,7 +92,8 @@ $ umi-lib doc build export default { entry: 'src/foo.js', doc: { - themeConfig: { mode: 'dark' } + themeConfig: { mode: 'dark' }, + base: '/your-repo' }, } ``` diff --git a/packages/umi-library/package.json b/packages/umi-library/package.json index e83289317bbb..91ca931f92b1 100644 --- a/packages/umi-library/package.json +++ b/packages/umi-library/package.json @@ -24,6 +24,7 @@ "docz-plugin-css-temp": "0.13.1", "docz-theme-default": "0.13.7", "extend2": "1.0.0", + "gh-pages": "^2.0.1", "happypack": "5", "less": "3.9.0", "less-plugin-npm-import": "2.1.0", diff --git a/packages/umi-library/src/doc.ts b/packages/umi-library/src/doc.ts index a837065316da..8518353ba117 100644 --- a/packages/umi-library/src/doc.ts +++ b/packages/umi-library/src/doc.ts @@ -2,12 +2,14 @@ import * as assert from 'assert'; import { sync as resolveBin } from 'resolve-bin'; import { fork } from 'child_process'; import { join } from 'path'; -import { writeFileSync } from 'fs'; +import { writeFileSync, existsSync } from 'fs'; import { sync as mkdirp } from 'mkdirp'; +import ghpages from 'gh-pages'; import getUserConfig, { CONFIG_FILES } from './getUserConfig'; import registerBabel from './registerBabel'; +import chalk from 'chalk'; -export default function ({ cwd, cmd, params = [] }) { +export default function({ cwd, cmd, params = [] }) { assert.ok( ['build', 'dev', 'deploy'].includes(cmd), `Invalid subCommand ${cmd}`, @@ -29,6 +31,14 @@ export default function ({ cwd, cmd, params = [] }) { 'utf-8', ); + if (cmd === 'deploy') { + return deploy(cwd, params); + } else { + return devOrBuild(cmd, params); + } +} + +function devOrBuild(cmd, params) { return new Promise((resolve, reject) => { const binPath = resolveBin('docz'); assert.ok( @@ -46,7 +56,7 @@ export default { `.trim(), ); - // test 时在 src 下没有 docrc.js + // test 时在 src 下没有 doczrc.js if (__dirname.endsWith('src')) { params.push('--config', join(__dirname, '../lib/doczrc.js')); } else { @@ -60,7 +70,7 @@ export default { params.push('--help'); } const child = fork(binPath, [cmd, ...params]); - child.on('exit', (code) => { + child.on('exit', code => { if (code === 1) { reject(new Error('Doc build failed')); } else { @@ -69,3 +79,20 @@ export default { }); }); } + +function deploy(cwd: string, params = {}) { + return new Promise((resolve, reject) => { + const distDir = join(cwd, '.docz/dist'); + assert.ok( + existsSync(distDir), + `Please run ${chalk.green(`umi-lib doc build`)} first`, + ); + ghpages.publish(distDir, params, err => { + if (err) { + reject(new Error(`Doc deploy failed. ${err.message}`)); + } else { + resolve(); + } + }); + }); +}