什么是Dgeni?
Dgeni是Angular团队开始的一个非常强大的NodeJS文档生成工具,所以说,不光是Angular项目,也可以运用到所有适用TypeScript、AngularJS、Ionic、Protractor等项目中。
主要功能就是将源代码中的注释转换成文档文件,例如HTML文件。而且还提供多种插件、服务、处理器、HTML模板引擎等,来帮助我们生成文档格式。
如果你之前的源代码注释都是在JSDoc形式编写的话,那么,你完全可以使用Dgeni创建文档。
那么,开始吧!
一、脚手项目
首先先使用angular cli创建一个项目,名也:ngx-dgeni-start。
ng new ngx-dgeni-start
接着还需要几个Npm包:
Dgeni 文档生成器。
Dgeni Packages 源代码生成文档的dgeni软件包。
Lodash Javascript工具库。
npm i dgeni dgeni-packages lodash --save-dev
dgeni 需要gulp来启用,所以,还需要gulp相关依赖包:
npm i gulp --save-dev
二、文件结构
首先创建一个 docs/文件夹用于存放dgeni所有相关的配置信息,
├── docs/ │ ├── config/ │ │ ├── processors/ │ │ ├── templates/ │ │ ├── index.js│ ├── dist/
config下创建 index.js配置文件,以及 processors 处理器和 templates 模板文件夹。dist下就是最后生成的结果。
三、配置文件
首先在 index.js配置Dgeni。
const Dgeni = require('dgeni');const DgeniPackage = Dgeni.Package;let apiDocsPackage = new DgeniPackage('ngx-dgeni-start-docs', [ require('dgeni-packages/jsdoc'), // jsdoc处理器 require('dgeni-packages/nunjucks'), // HTML模板引擎 require('dgeni-packages/typescript') // typescript包])
先加载 Dgeni 所需要的包依赖。下一步,需要通过配置来告知dgeni如何生成我们的文档。
1、设置源文件和输出路径
.config(function(log, readFilesProcessor, writeFilesProcessor) { // 设置日志等级 log.level = 'info'; // 设置项目根目录为基准路径 readFilesProcessor.basePath = sourceDir; readFilesProcessor.$enabled = false; // 指定输出路径 writeFilesProcessor.outputFolder = outputDir; })
2、设置Typescript解析器
.config(function(readTypeScriptModules) { // ts文件基准文件夹 readTypeScriptModules.basePath = sourceDir; // 隐藏private变量 readTypeScriptModules.hidePrivateMembers = true; // typescript 入口 readTypeScriptModules.sourceFiles = [ 'app/**/*.{component,directive,service}.ts' ]; })
3、设置模板引擎
.config(function(templateFinder, templateEngine) { // 指定模板文件路径 templateFinder.templateFolders = [path.resolve(__dirname, './templates')]; // 设置文件类型与模板之间的匹配关系 templateFinder.templatePatterns = [ '${ doc.template }', '${ doc.id }.${ doc.docType }.template.html', '${ doc.id }.template.html', '${ doc.docType }.template.html', '${ doc.id }.${ doc.docType }.template.js', '${ doc.id }.template.js', '${ doc.docType }.template.js', '${ doc.id }.${ doc.docType }.template.json', '${ doc.id }.template.json', '${ doc.docType }.template.json', 'common.template.html' ]; // Nunjucks模板引擎,默认的标识会与Angular冲突 templateEngine.config.tags = { variableStart: '{