怎样克己 JS 解释文档天生东西

关于一个成熟的项目而言,肯定须要一个解释文档天生东西,我们有许多可选的开源项目,如jsdocyuidocjs 等等,具有这些壮大的东西我们完全能够胜任任何解释方面的管理了么?

一个成熟的开辟者都邑晓得不论怎样的项目都邑在差别的开辟前提下有一些特定前提的需求,所以我本日要讲的就是怎样克己本身的解释文档天生东西。

以 jsdoc-zero(https://github.com/kahn1990/jsdoc-zero)为例,基于盛行的 jsdoc 范例。

组件的挑选

敕令行东西

起首我们须要一个敕令行东西来轻易的执行敕令,这里我们挑选 colors 组件,假如不喜欢运用 commander 且有才能的人完全能够经由历程 child_process 组件本身封装执行敕令函数。

打印组件

假如一向用 console 是否是色彩太单调了呢,没紧要,我们有 colors 或许 chalk 组件能够挑选,它会扩大我们的 console 敕令,用来在敕令行中显现其他色彩。

《怎样克己 JS 解释文档天生东西》

《怎样克己 JS 解释文档天生东西》

文件相干东西

既然是天生文档,不可避免的会天生文件夹,所以有 mkdirp 能够轻易疾速的协助我们天生文件夹。

剖析东西

既然是基于 jsdoc 范例,那末一个用来辨认文件解释的东西就不可少了,这里我们挑选 tj 大神的 dox,别的险些一切这类东西都默许支撑 markdown 文件,所以我们还须要 marked 来支撑 markdown。

html 模板

动态天生 html 文件我们须要一个好的模板引擎,人人怎样挑选呢?jade 照样 ejs?

这里我很悲催的跳了 swig 的坑,能够一些同砚没有听说过这个模板引擎,但它确切很优异。

underscore

末了的末了,我们须要一个处置惩罚数据的东西函数,我挑选 underscore,一是我对他比较熟习,也写过一些源码剖析的文章,二是我对比了下 lodash,lodash 与 underscore 的一些细节头脑确切差别,但从东西运用的角度来说,我们所运用的一些要领有大部分堆叠。

东西的构造

我们在最先之前肯定要先肯定项目的大致构造,这是每一个项目的必备历程。

《怎样克己 JS 解释文档天生东西》

这里我们如许设定,bin 用于放敕令相干要领,lib 放重要要领,其他的看字面意义就晓得做什么的了,不敖述了。

详细要领

先从敕令最先

我们先从怎样写敕令最先,起首我们先引入须要的组件

var command       = require('commander'),
    path          = require('path'),
    colors        = require("colors"),
    _             = require('underscore'),
    underscoreStr = require('underscore.string'),
    chalk         = require('chalk'),
    mkdirp        = require('mkdirp'),
    fs            = require('fs'),
    merge         = require('../lib/merge'),
    dox           = require('../lib/default');

然后将 underscore.string 扩大到 underscore 上面:

merge(_, {str: underscoreStr});

以后:

command
    .version(
        console.log(`
        name: ${chalk.green(loadConfigFiled.name)}
        version: ${chalk.yellow(loadConfigFiled.version)}
        `)
    )
    .usage('<keywords>')
    .command('build')
    .description('最先天生文档')
    .option('-d \<folder\>', '输入文件夹')
    .option('-o \<folder\>', '输出文件夹');                                // 敕令行东西版本展现

console.log('------------------------------------------------------------'.rainbow);
/**
 * 展现协助信息函数
 */
var showHelp = function () {
    process.stdout.write(command.helpInformation());
    command.emit('--help or -h');
    process.exit(1);
};

command.on('--help', function () {
    console.log('\tCommands:\n'.green);
    console.log('\t\t\$ build       竖立文档\n');
    console.log('\tExamples:\n'.green);
    console.log('\t\t\$ doxmate build \-o \<folder\> \-d [\<folder\>,...]\n');
    process.exit(1);
});                                                                                   // 敕令行协助

command.parse(process.argv);

这是用来显现敕令相干的内容,那末怎样执行敕令呢,我们须要:

var cmd = command.args[0];  

来猎取我们在敕令行输出的内容,如我输入jdz build,则 cmd==>build

然后对 cmd 参数举行相干推断:

switch (cmd) {
    case 'build':
        if (!judgeCmdExistence(cmd)) showHelp();

        testBuildCommand(process.argv.slice(3));
        //process.exit(1);
        loadConfigFiled.source.exclude = _.map(loadConfigFiled.source.exclude, function (item) {
            return _.str.strRight(path.resolve(item),loadConfigFiled.projectHomePath).substring(1);
        });
        dox(loadConfigFiled, function (err) {
            if (err) {
                console.log(chalk.blue.bgRed.bold('\n\t天生文档失利' + err));
                process.exit(1);
            }
        });
        break;
    default:
        console.error(colors.inverse('\n\t提醒:不能找到敕令 ' + cmd + ' !'));
        return showHelp();
}

以后退出历程 process.exit(0);。详细的相干内容检察 jsdoc-zero/bin/dox

重点来了

文档天生东西的重点除了文档剖析以外就是天生文件了,所以我们能够看下 jsdoc-zero/lib/default.js
大致上分为三个步骤:

  1. 竖立文件索引

  2. 婚配相干文件夹和过滤相干文件夹

  3. 浩瀚途径题目的处置惩罚

其他的我想人人这么智慧一看就能够 hold,然后能够依据本身的详细项目,变动相干要领定制本身的文档解释天生东西了。

PS:为何“重点来了”这么短、这么水?怎样说呢,楼主这几天身材不怎样惬意,千言万语不知从何说起(jsdoc-zero/lib/default.js 虽然只要短短的几百行,内部要领也没多少,然则各个的途径处置惩罚太蛋疼了),详细参考 https://github.com/kahn1990/jsdoc-zero 或许 https://www.npmjs.com/package/jsdoc-zero

其他参考

    原文作者:kangkk
    原文地址: https://segmentfault.com/a/1190000005897869
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞