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

資訊專欄INFORMATION COLUMN

開發一個Node命令行小玩具全過程--高顏統計工具

ytwman / 909人閱讀

摘要:相信熟悉系統的,對于一些等命令用起來應該愛不釋手,這也是我想要開發一個便捷命令行的初衷,其次就是記錄一個完整開源小玩具的全過程。

背景

命令行工具對于我們來說非常的熟悉,一些命令行的操作也極大的簡化了我們的日常工作。本文就基于我寫的一個Node命令行代碼計數器來進行展開。

相信熟悉linux系統的,對于一些ps,grep,cp,mv…等命令用起來應該愛不釋手,這也是我想要開發一個便捷命令行的初衷,其次就是記錄一個完整開源小玩具的全過程。

命令行的特點:

操作簡便

可視性強

看了一下當前的一些命令行有以下問題

種類少 https://github.com/Towtow10/l...

顏值不夠 https://github.com/AlDanial/cloc

統計不太方便 https://github.com/ryanfowler...

因此這一款高顏值方便的統計工具誕生。

高顏圖

玩具源碼

https://github.com/hua1995116...

準備

第三方庫

cli-table

colors

commander

ignore

dev庫(用來測試)

chai

mocha

codecov

istanbu

Node兼容性

babel

靜態文件

語言映射庫

顏色庫

思路

通過commander來獲取用戶的一些自定義配置

program
    .version("0.1.0")
    .option("-i, --ignore [dir]", "ignore dir")
    .option("-p, --path [dir]", "ignore dir")
    .parse(process.argv);

Node遍歷文件,每種語言行數信息

function getFile(dirPath) {

    const files = fs.readdirSync(dirPath);

    files.forEach((item) => {
        ...
    })
}
                  

ignore過濾輸出到cache

function handleIgnode(cPath) {
    try {
        const currentPath = path.join(ROOTPATH, ".gitignore");
        const fileData = fs.readFileSync(currentPath, "utf-8");
        const ignoreList = fileData.split("
");
        const filterList = filterData(ignoreList);
        const ig = ignore().add(filterList);
        return ig.ignores(cPath);
    } catch (e) {
        return false;
    }
}

遍歷cache,統計max-line,進行colors

function hanldeTable(){
    ...
    if (maxCount < langInfo[item].totalLines) {
        maxCount = langInfo[item].totalLines;
        maxIndex = index;
    }
    ...
}

cli-table 輸出展示

function outputTbale() {
    const {
        header,
        content,
        bottom
    } = initTable();

    const {
        totalFiles,
        totalCode,
        totalBlank,
        tablesContent
    } = hanldeTable();

    ...

    console.log(`T=${totalTime} s`, `(${fileSpeed} files/s`, `${lineSpeed} lines/s)`)
    console.log(header.toString())
    console.log(content.toString())
    console.log(bottom.toString())
}
改進

loading

對于多文件目錄,提供loading

lass StreamLoad {
    constructor(option) {
        this.stream = option.stream;
        this.text = option.text;
        this.clearLine = 0;
    }
    setValue(value) {
        this.text = value;
        this.render();
    }
    render() {
        this.clear();
        this.clearLine++;
        this.stream.write(`read ${this.text} file
`);
    }
    clear() {
        if(!this.stream.isTTY) {
            return this;
        }
        
        for (let i = 0; i < this.clearLine; i++) {
            this.stream.moveCursor(0, -1);
            this.stream.clearLine();
            this.stream.cursorTo(0);
        }
        this.clearLine = 0;
    }
}

const progress = new StreamLoad({
    stream: process.stderr,
    text: 0
})

創建了一個實現loading的類。主要用到readline中的處理方法,詳見https://nodejs.org/dist/latest-v8.x/docs/api/readline.html#readline_readline_movecursor_stream_dx_dy

babel

對于低版本node的兼容

cnpm i babel-cli

package.json

"build": "./node_modules/.bin/babel src --out-dir lib"
測試用例

chai,mocha

用來測試遍歷文件是否正確

const path = require("path");
const assert = require("chai").assert;

const {getFileData} = require("../src/linec");

describe("linec files test", () => {
    it("can linec dir", () => {
        const url = path.join(__dirname, "../example");
        console.log(url);

        const dirObj = JSON.stringify(getFileData(url));

        const expectData = "{"CSS":{"file":1,"blankLines":0,"totalLines":4,"color":"#563d7c"},"JavaScript":{"file":1,"blankLines":0,"totalLines":1,"color":"#f1e05a"},"JSON":{"file":1,"blankLines":0,"totalLines":3,"color":"#fff"},"Markdown":{"file":1,"blankLines":0,"totalLines":1,"color":"#fff"}}";

        assert.equal(dirObj, expectData);

    })
})

運行

./node_modules/mocha/bin/mocha

本項目中還添加了代碼覆蓋率的測試,因此是這樣的

"test": "./node_modules/.bin/istanbul cover node_modules/mocha/bin/_mocha && ./node_modules/.bin/codecov",
發布

Step1

打開https://www.npmjs.com/signup

注冊一個賬號

step2

如果有賬號直接到這一步

npm login

step3

在package.json中介入version

{
  "name": "linec",
  "version": "1.2.4",
  "description": "line count",
  "main": "index.js",
  ...
}

step4

npm publish

Tip:注意每次發版需要更改package.json 中的version,不然會發版失敗哦。

命令行

package.json

"bin": {
    "linec": "./lib/index.js"
},

本地項目命令行

npm link

就可以使用linec 命令,將linec命令軟連接到本地,linec這個名字可以自定義。

遠端命令行

默認就是包名字,但是如果bin里面定義了一個名字,同上,可以修改名字。也就是包名可以和命令不一致,但是為了更方便的使用,個人建議統一包名和命令。

詳情可以參考 http://www.ruanyifeng.com/blo...

持續集成測試&覆蓋率的自動統計

https://travis-ci.org/

配置.travis.yml

language: node_js

node_js:
  - "stable"

sudo: false

before_script:
  - npm install

這個是我的配置,每次你的提交,只要含有npm run test命令,travis會自動調用,自動檢測。

travis還有個好處,在別人給你提交pr的時候,可以自動運行測試用例,避免一些低級錯誤的發生。以下就是效果圖。

https://codecov.io/gh

這是一個統計代碼覆蓋率的工具,在npm run test中添加他,在pr的時候可以看到覆蓋率的統計

安裝&使用
$ npm install -g linec / cnpm install -g linec 
$ linec
功能

輸出空行,實際行數,總行數

支持400+語言

顯示遍歷速度

顯示多種顏色

工具源碼(歡迎star) https://github.com/hua1995116...

效果圖

結尾

以上就是全部內容,可能對于Node工具開發我可能還是處于初出茅廬的階段,有更規范的操作,歡迎大佬們給我指正。

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

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

相關文章

  • node命令行小工具開發【翻譯小工具

    摘要:命令行工具開發有許多命令行工具。現在我們就用來開發一個實用的命令行小工具一初探一個最簡單的命令行工具首先我們新建一目錄,然后執行生成文件新建一目錄并在目錄下創建一個執行我們可以看到終端輸出。。 node命令行工具開發 NodeJs有許多命令行工具。它們全局安裝,并提供一個命令供我們使用,完成相應的功能。 現在我們就用node來開發一個實用的命令行小工具 一.初探 一個最簡單的命令行工具...

    Yang_River 評論0 收藏0
  • Node命令工具開發【看段子小工具

    摘要:我們的小項目就初始化成功了,就可以認真思考代碼了首先分析糗事百科我們打開糗事百科會發現它的還是很簡單,由于我們只是爬取段子所以如下,就是頁數。 Node命令行工具開發【看段子】 你有沒有上班想看笑話卻又怕領導發現的經歷?現在我們就用幾十行代碼寫一個命令行看笑話段子的小程序,從此無需擔心領導的視察。這篇文章和上一篇差不多都是命令行小工具開發,不過本篇更偏向于小爬蟲的開發 總覽:命令行看段...

    kelvinlee 評論0 收藏0
  • Xshell – 高顏值體驗好Win系統個人免費SSH客戶端軟件

    摘要:老蔣在前面的老牌免費開源遠程客戶端軟件文章中有介紹到作為一款老牌免費的遠程連接工具我們很多運維工程師也都有使用過。我個人覺得是目前在系統中體驗較高顏值較好的免費客戶端軟件。在安裝過程中,我們選擇學校個人用戶,這個是免費資格的。老蔣在前面的PuTTY – 老牌免費開源Windows SSH遠程客戶端軟件文章中有介紹到Putty作為一款老牌免費的SSH遠程連接工具我們很多運維工程師也...

    番茄西紅柿 評論0 收藏2637

發表評論

0條評論

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