<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        使用node.js構(gòu)建命令行工具

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:56:04
        文檔

        使用node.js構(gòu)建命令行工具

        使用node.js構(gòu)建命令行工具:本篇文章給大家分享的內(nèi)容是使用node.js構(gòu)建命令行工具 ,有著一定的參考價(jià)值,有需要的朋友可以參考一下工具說明inquirer.js:一個(gè)封裝了常用命令行交互的node.js模塊,通過該模塊可以很方便地構(gòu)建一個(gè)新的命令行應(yīng)用。shell.js:跨平臺(tái)的unix sh
        推薦度:
        導(dǎo)讀使用node.js構(gòu)建命令行工具:本篇文章給大家分享的內(nèi)容是使用node.js構(gòu)建命令行工具 ,有著一定的參考價(jià)值,有需要的朋友可以參考一下工具說明inquirer.js:一個(gè)封裝了常用命令行交互的node.js模塊,通過該模塊可以很方便地構(gòu)建一個(gè)新的命令行應(yīng)用。shell.js:跨平臺(tái)的unix sh

        本篇文章給大家分享的內(nèi)容是使用node.js構(gòu)建命令行工具 ,有著一定的參考價(jià)值,有需要的朋友可以參考一下


        工具說明

      1. inquirer.js:一個(gè)封裝了常用命令行交互的node.js模塊,通過該模塊可以很方便地構(gòu)建一個(gè)新的命令行應(yīng)用。

      2. shell.js:跨平臺(tái)的unix shell命令模塊。

      3. Node版本:由于inquirer.js的異步方法默認(rèn)返回Promise,建議使用node.js>=8。

      4. 目標(biāo)

        工作中有大量項(xiàng)目上線前最后一步需要執(zhí)行測試、編譯、更新版本號(hào)、提交,甚至執(zhí)行的命令都是一樣,在這里我們通過命令行工具將這些步驟一鍵自動(dòng)化,同時(shí)進(jìn)行預(yù)檢查,防止錯(cuò)漏。

        準(zhǔn)備

        1. 創(chuàng)建一個(gè)新的Node.js項(xiàng)目。

        2. 創(chuàng)建文件bin/my-cli.js,node.js項(xiàng)目通常會(huì)把cli入口放在bin目錄下,其他模塊放在lib目錄下。

        3. 在bin/my-cli.js文件頭部添加#!/usr/bin/env node。

        4. 添加 "bin": {"my-cli": "./bin/my-cli.js"},到package.json,聲明我們要使用的命令。

        5. 項(xiàng)目根目錄下執(zhí)行npm link,創(chuàng)建一個(gè)全局命令my-cli

        稍微修改下my-cli.js,添加代碼console.log("I am a cli tool!"),然后打開控制臺(tái)運(yùn)行my-cli命令,如果看到控制臺(tái)輸出I am a cli tool!就表示成功。

        安裝依賴

        首先安裝主要依賴的兩個(gè)模塊(關(guān)于這兩個(gè)模塊的使用請參考官方文檔)

        npm install inquirer shelljs

        構(gòu)建發(fā)布流程自動(dòng)化

        接下來首先實(shí)現(xiàn)測試、更新版本號(hào)、構(gòu)建、自動(dòng)提交發(fā)布的自動(dòng)化

        const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
        
        const { version } = await inquirer.prompt([
         {
         type: 'list',
         name: 'version',
         message: '版本號(hào)更新方式:',
         choices: [
         {
         name: `v${semver.inc(pkg.version, 'patch')}: Fix Bugs / Patch`,
         value: 'patch'
         },
         {
         name: `v${semver.inc(pkg.version, 'minor')}: Release New Version`,
         value: 'minor'
         },
         ]
         }
        ]);
        // 拉取最新版本
        shelljs.exec('git pull');
        // 運(yùn)行測試
        shelljs.exec('npm test');
        //通過npm version更新版本號(hào),但不自動(dòng)添加git tag,而是在構(gòu)建完成后由cli工具添加
        shelljs.exec(`npm version ${version} --no-git-tag-version`);
        // 構(gòu)建
        shelljs.exec('npm run build');
        // 提交發(fā)布代碼
        const nextVersion = semver.inc(pkg.version, version);
        shelljs.exec('git add . -A');
        shelljs.exec(`git commit -m "build: v${nextVersion}"`)
        shelljs.exec(`git tag -a v${nextVersion} -m "build: ${nextVersion}"`);
        shelljs.exec("git push")
        shelljs.exec("git push --tags");

        添加新功能:配置檢查

        接下來給my-cli添加一個(gè)功能:

        當(dāng)檢查到package.json的my-cli對象的check-baidu-id屬性為true時(shí),檢查項(xiàng)目的config.json是否存在baidu-id屬性

        if (pkg['my-cli'] && pkg['my-cli']['check-baidu-id']) {
         const configPath = path.join(process.cwd(), 'config.json');
         if (!fs.existsSync(configPath)) {
         shelljs.echo('找不到config.json');
         shelljs.exit(1);
         }
         const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
         if (!config['baidu-id']) {
         shelljs.echo('config.json缺少屬性[baidu-id]');
         shelljs.exit(1);
         }

        最后一步

        這樣一個(gè)簡單的cli程序就實(shí)現(xiàn)完畢了,它自動(dòng)化了構(gòu)建發(fā)布流程,構(gòu)建發(fā)布之前還進(jìn)行了配置檢查。

        在實(shí)際項(xiàng)目中,為了提高程序的穩(wěn)定性,還需要添加檢查當(dāng)前項(xiàng)目是否存在package.json,防止json解析出錯(cuò)、執(zhí)行前確認(rèn)等功能,具體見示例代碼。

        示例代碼

        地址:https://github.com/Aturan/node-cli-example

        結(jié)語

        雖然上述功能使用shell也可以實(shí)現(xiàn),但代碼編寫就沒那么方便快速,而且一旦碰到更復(fù)雜的問題,用shell實(shí)現(xiàn)就很麻煩,維護(hù)也是一個(gè)問題。

        PS. 其實(shí)也可以用python,對于Ubuntu,系統(tǒng)自帶Python是一個(gè)優(yōu)勢,在服務(wù)器不需要安裝環(huán)境就可以直接使用,再加上Python也有Inquirer模塊。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用node.js構(gòu)建命令行工具

        使用node.js構(gòu)建命令行工具:本篇文章給大家分享的內(nèi)容是使用node.js構(gòu)建命令行工具 ,有著一定的參考價(jià)值,有需要的朋友可以參考一下工具說明inquirer.js:一個(gè)封裝了常用命令行交互的node.js模塊,通過該模塊可以很方便地構(gòu)建一個(gè)新的命令行應(yīng)用。shell.js:跨平臺(tái)的unix sh
        推薦度:
        標(biāo)簽: js 構(gòu)建 命令行
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top 主站蜘蛛池模板: 久久久久久久久久久免费精品 | 日韩亚洲国产综合久久久| 久久亚洲AV成人无码国产| 嫩草在线视频www免费观看 | 亚洲国产成人爱av在线播放 | 中文字幕a∨在线乱码免费看| 成人亚洲网站www在线观看| 国产亚洲福利精品一区二区| 日韩精品免费电影| 免费观看又污又黄在线观看| yy6080久久亚洲精品| a一级毛片免费高清在线| 国产亚洲美女精品久久久| 在线看片免费人成视频福利| 亚洲AV永久纯肉无码精品动漫| 久久国产精品免费网站| 亚洲精品91在线| 免费鲁丝片一级观看| 黄色免费网址大全| 中文字幕在线亚洲精品| 91精品国产免费久久国语麻豆| 亚洲人色大成年网站在线观看| 免费鲁丝片一级观看| 国产免费久久精品99久久| 亚洲精品天天影视综合网| 91黑丝国产线观看免费| 在线观看亚洲专区| 国产亚洲精品精华液| 日韩免费一区二区三区在线播放| 亚洲伊人久久大香线蕉AV| 亚洲国产午夜中文字幕精品黄网站| 黄色视屏在线免费播放| 亚洲一区二区三区高清视频| 在线观看国产情趣免费视频| 国产免费A∨在线播放| 久久亚洲国产成人精品性色| 国产在线观看免费视频播放器| 成全在线观看免费观看大全| 亚洲无吗在线视频| 亚洲国产精品特色大片观看完整版| 九九精品免费视频|