国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何自制 JS 注釋文檔生成工具

Cristalven / 2884人閱讀

摘要:組件的選擇命令行工具首先我們需要一個命令行工具來方便的執行命令,這里我們選擇組件,如果不喜歡使用且有能力的人完全可以通過組件自己封裝執行命令函數。

對于一個成熟的項目而言,一定需要一個注釋文檔生成工具,我們有很多可選的開源項目,如jsdoc、yuidocjs 等等,擁有這些強大的工具我們完全可以勝任任何注釋方面的管理了么?

一個成熟的開發者都會知道不管怎么樣的項目都會在不同的開發條件下有一些特定條件的需求,所以我今天要講的就是如何自制自己的注釋文檔生成工具。

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

組件的選擇 命令行工具

首先我們需要一個命令行工具來方便的執行命令,這里我們選擇 colors 組件,如果不喜歡使用 commander 且有能力的人完全可以通過 child_process 組件自己封裝執行命令函數。

打印組件

如果一直用 console 是不是顏色太單調了呢,沒關系,我們有 colors 或者 chalk 組件可以選擇,它會擴展我們的 console 命令,用來在命令行中顯示其他顏色。

文件相關工具

既然是生成文檔,不可避免的會生成文件夾,所以有 mkdirp 可以方便快速的幫助我們生成文件夾。

解析工具

既然是基于 jsdoc 規范,那么一個用來識別文件注釋的工具就不可少了,這里我們選擇 tj 大神的 dox,另外幾乎所有這類工具都默認支持 markdown 文件,所以我們還需要 marked 來支持 markdown。

html 模板

動態生成 html 文件我們需要一個好的模板引擎,大家怎么選擇呢?jade 還是 ejs?

這里我很悲催的跳了 swig 的坑,可能一些同學沒有聽說過這個模板引擎,但它確實很優秀。

underscore

最后的最后,我們需要一個處理數據的工具函數,我選擇 underscore,一是我對他比較熟悉,也寫過一些源碼解析的文章,二是我對比了下 lodash,lodash 與 underscore 的一些細節思想確實不同,但從工具使用的角度來講,我們所使用的一些方法有大部分重疊。

1625行,解開 underscore.js 的面紗 - 第一章

1625行,解開 underscore.js 的面紗 - 第二章

1625行,解開 underscore.js 的面紗 - 第三章

1625行,解開 underscore.js 的面紗 - 第四章

1625行,解開 underscore.js 的面紗 - 第五章

1625行,解開 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("")
    .command("build")
    .description("開始生成文檔")
    .option("-d ", "輸入文件夾")
    .option("-o ", "輸出文件夾");                                // 命令行工具版本展示

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("	Commands:
".green);
    console.log("		$ build       創建文檔
");
    console.log("	Examples:
".green);
    console.log("		$ doxmate build -o  -d [,...]
");
    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("
	生成文檔失敗" + err));
                process.exit(1);
            }
        });
        break;
    default:
        console.error(colors.inverse("
	提示:不能找到命令 " + cmd + " !"));
        return showHelp();
}

之后退出進程 process.exit(0);。具體的相關內容查看 jsdoc-zero/bin/dox。

重點來了

文檔生成工具的重點除了文檔解析之外就是生成文件了,所以我們可以看下 jsdoc-zero/lib/default.js:
大體上分為三個步驟:

建立文件索引

匹配相關文件夾和過濾相關文件夾

眾多路徑問題的處理

其他的我想大家這么聰明一看就可以 hold,然后可以根據自己的具體項目,更改相關方法定制自己的文檔注釋生成工具了。

PS:為什么“重點來了”這么短、這么水?怎么說呢,樓主這幾天身體不怎么舒服,千言萬語不知從何說起(jsdoc-zero/lib/default.js 雖然只有短短的幾百行,內部方法也沒多少,但是各個的路徑處理太蛋疼了),具體參考 https://github.com/kahn1990/jsdoc-zero 或者 https://www.npmjs.com/package/jsdoc-zero 。

其他參考

http://usejsdoc.org/

http://yui.github.io/yuidoc/

http://jashkenas.github.io/docco/

http://jsdox.org/

https://github.com/senchalabs/jsduck/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79932.html

相關文章

  • 【云主機 UHost】操作指南:[鏡像]自定義鏡像、使用Packer創建自定義鏡像并導入本地鏡像

    摘要:云主機自定義鏡像制作鏡像選中要制作鏡像的主機,然后點擊制作鏡像按鈕。鏡像的適用機型限制傳承自改自定義鏡像的母鏡像。如下圖所示,通過在中集成等工具,制作包含各類軟件的不可變鏡像,供多云平臺的云主機等使用。云主機UHost自定義鏡像制作鏡像選中要制作鏡像的主機,然后點擊制作鏡像按鈕。填寫鏡像名稱和描述,點擊確定即可創建鏡像。輸入鏡像名稱和描述之后,點擊確定按鈕,即可生成該主機的鏡像,此時頁面即跳...

    Tecode 評論0 收藏0
  • 自制 require 函數:讓瀏覽器輕松實現 js 文件按需加載

    摘要:劇透一下,實現這個功能只需要行代碼。如何判斷文件已經加載完畢可以在文件里執行一個函數,通知大家,我已經加載完了。 唉?這種文章你也點進來看,你不知道有 LABjs、RequireJS、SeaJS... 這些庫嗎? 反正我是沒用過這些庫,什么 AMD 、CMD 哪來那么多術語... 前端的庫太多了,要看各種亂七八糟的文檔,看文檔就想睡覺,就像學一門新語言一樣,好煩啊,還不如自己寫一個庫呢...

    qianfeng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<