工具(5): 极简开发文档编写(How-to)
缘起
一个合格的可维护项目,必须要有足够的文档,因此一个项目开发到一定阶段后需要适当的编写文档。项目的类型多种多样,有许多项目属于内部项目,例如一个内部的开发引擎,或者一个本身就是面向开发者的项目。
本文考虑的是这种面向开发者的项目文档编写。通过本文,你将快速获得如下技能:
- 理解开发项目文档的基本要素
- 掌握编写有头有尾结构化文档的能力
- 获得1个开发项目文档编写的模版项目和现成工具
感受
在开始之前,我们先通过几个现成的例子,直观的感受一个面向开发者的项目,其专业的文档应该是什么样的。我们通过直接截图的方式直接了当的表达这点。
Rust编程语言文档
文档地址:doc.rust-lang.org-2018
截图:

Julia编程语言文档
截图:

BuckyCloud开发文档
文档地址:docs.buckycloud.com-zh-cn
截图:

小结一下,开发项目文档一般都具有如下章节:
- 介绍(Introduction)
- 快速开始(QuickStart, Helloworld, Getting Started...)
- 整体介绍(Common/Core/Basic Concept, Architecture, Understanding...)
- 开发手册(References)
- 示例(Examples)
- 知识库文章(Articles)
根据项目特点,不同类型的项目会做对应的取舍和顺序调整。
工具
工欲善其事,必先利其器。作为极简系列,我们直接了当的介绍我们的工具:
通过Gitbook可以在线编写文档,按照上一节的套路即可编写出相对专业的文档。但是Gitbook同时提供了一个命令行工具,使得我们可以直接在本地编写MarkDown文档,然后使用命令行工具把MarkDown转成文档网页。
Gitbook命令行工具如下,该工具基于nodejs编写,因此你需要安装nodejs:
因此你只需:
- 创建一个git仓库
- 创建完整的文档目录结构,并使用MarkDown编写章节内容
- 编写脚本调用gitbook-cli转换文档目录为网页
- 部署网页到线上即可,例如docs.example.com
快速体验
现在,我们可以通过几个命令来快速体验一下。
- 首先,请安装nodejs:http://nodejs.org/
- 其次,请克隆示例项目:
git clone https://github.com/fanfeilong/doc.git - 接着,执行
npm install来安装依赖的node modules。 - 接着,在doc目录下执行命令生成文档:
node doc.js docs.starlab docs.starlab.io- 注意docs.js的第一个参数是文档源目录,第二个参数是我们希望生成的网站目录
- docs.js会自动安装依赖的
gitbook-cli,首次安装会慢一些。
- docs.js会自动安装依赖的
- 注意docs.js的第一个参数是文档源目录,第二个参数是我们希望生成的网站目录
- 可以看到浏览器已经打开了生成的文档:

如果你直接在Chrome浏览器里打开生成的静态HTML里的index.html会出现跨域请求问题,本地起网页调试的方式如下:
- cd docs.starlab
- gitbook serve
- 浏览器访问:http://localhost:4000
文档目录设计
gitbook要求根目录下必须有如下三个MarkDown文档:
index.mdREADME.mdSUMMARY.md
示例中,我们虚拟了一个开发项目的文档目录docs.starlab,设计目录结构如下:
.
├── 1.QuickStart
│ ├── 1.1.InstallStarlabSDK.md
│ ├── 1.2.Hello,Starlab.md
│ ├── 1.3.UnderstandingStarlabApp.md
│ ├── 1.4.HowToDebugStarlab.md
│ └── 1.5.UnderstandingDebugger.md
├── 2.LearnStarlabSDK
│ ├── 2.1.IntrudoctionToStarlab.md
│ └── 2.2.CoreConcept.md
├── 3.Examples
│ ├── 3.1.CreateEarth.md
│ ├── 3.2.CreateMars.md
│ └── 3.3.CreateMoon.md
├── 4.References
│ ├── ref_fixedstar.md
│ ├── ref_meteor.md
│ ├── ref_planet.md
│ ├── tool_fixedstar.md
│ ├── tool_meteor.md
│ └── tool_planet.md
├── README.md
├── SUMMARY.md
└── index.md
- 其中,index.md用来生成Introduction一节
- 其中,README.md是gitbook需要的,一般我们让README.md和index.md的内容一样即可。
- 其中,SUMMARY.md通过MarkDown来组织网页左侧的目录结构。
可以看一下SUMMARY.md的内容:
# Document
* [1. QuickStart](1.QuickStart/1.1.InstallStarlabSDK.md)
* [1.1. Install StarlabSDK](1.QuickStart/1.1.InstallStarlabSDK.md)
* [1.2. Hello, Starlab](1.QuickStart/1.2.Hello,Starlab.md)
* [1.3. Understanding Starlab App](1.QuickStart/1.3.UnderstandingStarlabApp.md)
* [1.4. How to Debug Starlab](1.QuickStart/1.4.HowToDebugStarlab.md)
* [1.5. Understanding Debugger](1.QuickStart/1.5.UnderstandingDebugger.md)
* [2. Learn Starlab SDK](2.LearnStarlabSDK/2.1.IntrudoctionToStarlab.md)
* [2.1. Introduction to Starlab](2.LearnStarlabSDK/2.1.IntrudoctionToStarlab.md)
* [2.2. Core Concept](2.LearnStarlabSDK/2.2.CoreConcept.md)
* [3. Examples](3.Examples/3.1.CreateEarth.md)
* [3.1. Create Earth](3.Examples/3.1.CreateEarth.md)
* [3.2. Create Mars](3.Examples/3.2.CreateMars.md)
* [3.3. Create Moon](3.Examples/3.3.CreateMoon.md)
* [4. References](4.References/ref_fixedstar.md)
* [fixedstar](4.References/ref_fixedstar.md)
* [meteor](4.References/ref_meteor.md)
* [planet](4.References/ref_planet.md)
* [fixedstar tool](4.References/tool_fixedstar.md)
* [meteor tool](4.References/tool_meteor.md)
* [planet tool](4.References/tool_planet.md)
注意:目录名和文档名不能含有空格,但是在SUMMARY.md里组织的时候,[text](relativepath)格式里的text可以起更友好的名字。
部署
如果需要部署,只需要把生成的网站部署到自己的网站服务器上即可。
你的尝试
相信,通过本文的方式,你可以为自己的项目快速构建内部或外部文档,如果你想了解doc.js做了什么,你可以直接阅读这个简短的工具脚本,按需定制。我用这个方式已经为好多个项目写了专业的文档,希望你也可以!GoodLuck!
--end--
工具(5): 极简开发文档编写(How-to)的更多相关文章
- So注入工具TsoInject开发文档
So注入工具TsoInject开发文档 导语: 作为一个软件安全从业者而言,我们需要对某个App的关键函数就行Hook, 对于android而言,Smali层我们使用Xposed Hook框架,So层 ...
- .NET6使用DOCFX自动生成开发文档
本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- ECMall模板开发文档
ECMall 模板开发文档 前 言 欢迎阅读 ECMall 模板制作教程,通过阅读本教程可快速上手 ECMall 模板的使用和制作. ECMall 模板制 作要求用户具备 XML . XHTML 和 ...
- [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
[技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档 Doxygen本来是一个很好的工具,可是我感觉在mac系统下,如果用doxygen最后生成的CHM文件感觉就不是那么恰当, ...
- 项目管理之 使用 appledoc 生成开发文档
写项目时通常会遇到要求写开发文档的需求,但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.Objective-C 有一些文档管理工具,doxygen, headdoc 和 apple ...
- 若快打码平台python开发文档修改版
一.打码的作用 在进行爬虫过程中,部分网站的登录验证码是比较简单的,例如四个英文数字随机组合而成的验证码,有的是全数字随机组成的验证码,有的是全中文随机组成的验证码.为了爬虫进行自动化,需要解决自动登 ...
- 【原创】Odoo开发文档学习之:构建接口扩展(Building Interface Extensions)(边Google翻译边学习)
构建接口扩展(Building Interface Extensions) 本指南是关于为Odoo的web客户创建模块. 要创建有Odoo的网站,请参见建立网站;要添加业务功能或扩展Odoo的现有业务 ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.send
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.send 1.返回顶部 1. templateMessage.send 本接口应在服务器端调用,详细说明参见服 ...
随机推荐
- qml demo分析(samegame-拼图游戏)
一.效果展示 相信大家都玩儿过连连看游戏,而且此款游戏也是闲时一款打发时间的趣事,那么接下来我将分析一款类似的游戏,完全使用qml编写界面,复杂逻辑使用js完成.由于此游戏包含4种游戏模式,因此本篇文 ...
- VLayoutDemo【VLayout的简单使用demo(基于V1.2.8版本)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 VirtualLayout是一个针对RecyclerView的LayoutManager扩展, 主要提供一整套布局方案和布局间的组件 ...
- LindDotNetCore~Ocelot实现微服务网关
回到目录 网关在硬件里有自己的定义,而在软件架构里也有自己的解释,它就是所有请求的入口,请求打到网关上,经过处理和加工,再返回给客户端,这个处理过程中当然就是网关的核心,也是Ocelot的核心,我们可 ...
- [macOS开发.NET Core] 开篇 & 抉择 & 先利其器
一直以来MacBook是大多数开发者的首选,无论是macOS的便利性,还是MBP的外观,更或者是为了装13,我一直认为一个开发者必须得拥有一部MBP.虽然最后的因素是大多数的. 终于在我的努力下说服下 ...
- 【译】使用 LINQ 合并 IEnumerable 序列
Zip 方法允许把序列中的元素通过交织将 IEnumerable 序列连接在一起.Zip 是一种基于 IEnumerable 的扩展方法.例如,将具有年龄的名称集合压缩在一起: var names = ...
- 什么是5G,看了这篇文章你就彻底懂了
人类已经经历了六次信息技术革命为: 第一次:语言的使用 让信息可以分享 第二次:文字的创造 让信息可以记录 第三次:印刷术的发明 让信息可以传得更远 第四次:无线电的发明 让信息可以远距离实时传输 第 ...
- 69道Spring面试题和答案,简单明了无套路
目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...
- select设置text的值选中(兼容ios和Android)基于jquery
前一段时间改了一个bug,是因为select引起的.当时我没有仔细看,只是把bug改完了就完事了,今天来总结一下. 首先说option中我们通常会设置value的属性的,还有就是text值的,请参见下 ...
- 20190422-外部导入CSS样式之link、CSS@import、Sass分音
写在前面乱七八糟的前言:今天wuliMR黄问了一个问题,Sass的分音与link标签都是导入外部样式的,有什么不同,这真是个好问题,因为本白着实没想过,也不知道,不过没关系,成功的背后总有一个默默无闻 ...
- 轨迹系列4——WebGIS中使用ZRender实现轨迹前端动态播放特效
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在地图上以时间轴方式播放人员.车辆在地图上的历史行进 ...