1. 程式人生 > >用Npm構建一個簡單的命令列工具

用Npm構建一個簡單的命令列工具

原文章連結:請戳

Npm構建一個簡單的命令列工具

在團隊開發過程中,你是用什麼工具去呼叫private package的呢?最常見的答案就是:使用命令列工具來使用它。我們用兩部分來介紹如何製作其中一款命令列工具。

場景一:輕鬆部署GitHub pages

部署專案通常比較繁瑣,因此我們使用自動化來完成部署任務。目前,有很多的task runners都可以為我們自動化構建任務,但是最簡單的一種方式就是npm run scripts
本章中,我們用構建一個GitHub page的例子來演示,當然我們也可以使用這種方式去部署其他服務,例如Heroku、AWS。或者你可以將它作為一個private package

釋出,裡面包含公司內部程式碼以及配置選項。

npm run scripts

首先,你定義一段可以被執行的字串指令,當你呼叫指令碼的時候,在命令列匯中執行npm run scripts,例如,我們為一個指令碼命名為patch-release

#package.json
{
  "name": "index",
  "version": "1.0.1",
  "scripts": {
    "patch-release": "npm version patch && npm publish && git push --follow-tags"
  }
}

這裡寫圖片描述

當你執行patch-release的時候,它會通過npm version來修改package.json中的version並且提交更新,然後釋出到npm,接著push到GitHub。
如果你在dependenciesdevDependencies配置項中提前設定了modules,你就可以不用在將依賴包設定為全域性,它們將是可以直接使用的。並且你也可以在scripts中使用其他的指令碼npm run scripts

用指令碼釋出頁面

git-it啟發,我們用指令碼來部署到GitHub pages,構建步驟如下:

"scripts": {
    "build": "...",
    "git-commit
": "git add -A . && git commit -a -m 'gh-pages update'", "git-push": "git push origin gh-pages --force && git checkout master", "deploy": "npm run build && npm run git-commit && npm run git-push" },

然後,在我們想要部署的時候,執行npm run deploy即可。

還有更好的方式嗎?

這種方式很棒。這將意味著你可以不用去記住那些冗長的字串指令,以及他們對應的flags。然而,你想按照這種方式部署到其他專案又得大量copy&paste。這將意味著在你的專案中又得大量重複您的程式碼。
那麼,我們怎麼才能遵循”don’t repeat yourself”原則呢?我們可以嘗試建立一個module,它可以將多個字串指令合併成為一條指令。這就是說我們在不同的專案裡面,可以很輕鬆的使用和維護這些指令還能分享給團隊。
詳情參見:戳這裡

Step1: 建立一個基本的命令列介面

首先,我們建立一個基本的Common line interface(也稱做CLI)。

  1. 建立一個package 清單
    package 清單(即‘package.json’ 檔案),它裡面含有基本資訊,例如包名稱(package name),版本號(version)。
    如果你想給你的package限定使用範圍,供你的內部團隊使用時,你可以考慮使這個包成為private package,設定的範圍應該是你的使用者名稱。

    $ npm init --scope=xxx
  2. 建立一個可被執行的指令碼檔案
    因為我們想要執行命令列,但是前提是我們需要用一個直譯器去啟動檔案(有時候我們稱為shebang line)

    
    #! ./node/env node
    
    console.log('console.log output')

現在我們執行測試一下:node bin/commit.js
3. 告訴命令列你的命令是什麼
我們想要執行一條命令,那麼我們首先得告訴Node如何才能找到能被執行的檔案,我們吧這條指令命名為github-pages-commit。同時,我們在package.json檔案中新增一個關鍵字:bin。

{
    "bin": {
         "github-pages-commit": "bin/commit.js"
    }
}
  1. 確保命令可用
    為了測試你的命令被拾取到,使用npm link來執行關聯操作,這將確保你的指令(github-pages-commit)是可以被正確執行的。

step2: 執行被提交的命令

現在我們已經驗證了一個能被執行的CLI,我們可以新增我們的命令了。
npm run scripts 使用很方便,因為你可以很輕鬆在命令列中使用指令。在可複用的模組中執行這些指令碼很便捷,否則,我們的團隊就不能確保那些指令碼重用。
我們將使用shelljs模組來實現,或者你也可以使用node‘s child_process,但是使用shelljs有一個好處就是,你可以在window系統中使用大量的unix指令。具體參考文件: 請戳這裡
1. 將shelljs 作為依賴

$ npm install --save shelljs

將會在package.json檔案中被新增為依賴(dependency)
2. 測試 shll.exec() 執行正常
為了確保我們掌握shell.exec()如何工作,我們將新增一個簡單的輸出宣告到 bin/commit.js


#! /node/env node

$ var shell = require('shelljs')
shell.exec('echo shell.exec works')
  1. 使github-pages-commit 執行一個提交
    為此,我們在命令列中簡單的新增一個命令,用它來執行一次提交
    
    #! ./node/node
    
    $ var shell = require('shelljs')
    shell.exec("git add -A . && git commit -a -m 'update' ")

為了測試這個,開啟另一個命令列視窗並轉到您使用GitHub頁面的repo進行更改,然後執行github-pages-commit。在執行git log之後,您應該看到提交訊息的提交gh-pages update。

step3: 新增其他兩個命令

  1. 新增 bin/push/js

    
    # /user/bin/env node
    
    $ var shell = require('shelljs')
    $ shell.exec('git push origin master --force')
  2. 新增 bin/deploy.js
    我們通過定義過的其他指令進行合併

    
    #! /node/env node
    
    var shell = require("shelljs")
    shell.exec("github-pages-commit && github-pages-push")
  3. 對映指令檔案

    {
      "github-pages-commit":"bin/commit.js",
      "github-pages-push":"bin/push.js",
      "githuv-pages-deploy":"bin/deploy.js"
    }
  4. 再次執行npm link
    您需要npm link再次執行,以便它將建立兩個新的符號連結。
    現在您可以進行其他更改並執行github-pages-deploy以測試完整的任務。

step4: 釋出你的package

如果你之前從未釋出過軟體包,請戳這裡
因為這是一個有作用域的包,如果你想公開發布,必須使用access選項,瞭解更多請戳這裡

npm publish --access=publish

最後,付費會員可以釋出private package。

step5: 將你的命令新增為npm run scripts

我們可以告訴我們的團隊在全域性安裝這個模組,然後所有的指令都將可以在命令列中執行,我們不需要用npm 執行指令碼,但是全域性安裝有兩個缺點:首先,在新同事著手一個專案的時候他得體檢做一些準備工作,其次,當專案依賴更新的時候,你的團隊成員必須也要更新全域性模組。
相反,我們要使它的一個devDependencies在package.json為我們要部署的專案。通過這種方式,當新開發人員npm install開始執行專案時會下載它,並且每次開發人員執行時都會進行更新npm update。

$ npm install --save-dev @xxx/github-pages-deploy

現在您可以將可複用命令新增為npm執行指令碼

{
    "scripts":{
        "build": "....",
        "deploy": "github-pages-deploy"
    }
}

TO BE CONTINUE…

相關推薦

Npm構建一個簡單命令工具

原文章連結:請戳 Npm構建一個簡單的命令列工具 在團隊開發過程中,你是用什麼工具去呼叫private package的呢?最常見的答案就是:使用命令列工具來使用它。我們用兩部分來介紹如何製作其中一款命令列工具。 場景一:輕鬆部署GitHu

curl 7.63.0 釋出, URL 傳輸資料的命令工具和庫

   curl 7.63.0 釋出了,此版本主要更新如下: curl: --write-out 新增 %{stderr} 和 %{stdout} curl: win32 新增選項 --dump-module-paths setopt: 新增 

Java構建一個簡單的WebSocket聊天室

本文首發公眾號 Java貓說 & 貓叔的部落格 | MySelf,轉載請申明出處。 前言 首先對於一個簡單的聊天室,大家應該都有一定的概念了,這裡我們省略使用者模組的講解,而是單純的先說說聊天室的幾個功能:自我對話、好友交流、群聊、離線訊息等。 今天我們要做的demo就能幫我們做到這一

Java構建一個簡單的WebSocket聊天專案之新增HTTP介面排程

本文首發公眾號與個人部落格:Java貓說 & 貓叔的部落格 | MySelf,轉載請申明出處。 前言 大家可以看看上一篇:用Java構建一個簡單的WebSocket聊天室 在上一篇文章中我們已經實現了:自我對話、好友交流、群聊、離線訊息等的功能。 而本篇,我們的框架升級了,

GO實現簡單(命令)工具:sftp,文件壓解,RDS備份,RDS備份下載

GO實現簡單(命令列)工具:sftp,文件壓解,RDS備份,RDS備份下載 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 內容提要: 1.遠端連線linux執行sftp檔案下載 2.window下檔案解壓縮(tar、gz、zip) 3.wi

Go寫一個簡單的Selpg命令程式

設計說明 【程式簡介】 Selpg從標準輸入或從作為命令列引數給出的檔名讀取文字輸入。它允許使用者指定來自該輸入並隨後將被輸出的頁面範圍,然後輸出到標準輸出或是檔案中。 【程式設計】 程式的功能分為以下幾個部分: 讀取一條命令列輸入的指令 解析命令,分析其中

nodejs 寫一個命令工具 :建立 react 元件的命令工具

用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具 前言 上週,同事抱怨說 react 怎麼不能像 angular 那樣,使用命令列工具來生成一個元件。對呀,平時工作時,想要建立一個 react 的元件,都是直接 copy 一個元件,然後做一些修改。為什麼不能將這個過程交給程式去做

全網最詳細的一個超級好命令工具【Cmder】的優點有哪些?

    不多說,直接上乾貨!   1、把conemu,msysgit和clink打包在一起,讓你無需配置就能使用一個真正乾淨的Linux終端!甚至還附帶了漂亮的monokai配色主題。   2、選中右擊直接可以實現複製功能   3、主控臺文字自動放大縮小功能,按下Ctrl+滑鼠滾輪就可以

全網最詳細的一個超級好命令工具【Cmder】的下載與安裝(圖文詳解)

    不多說,直接上乾貨!         下載的時候,有兩個版本,分別是mini與full版;唯一的差別在於有沒有內建msysgit工具,這是Git for Windows的標準配備;全安裝版 cmder 自帶了 msysgit, 壓縮包 23M, 除了 git 本身這個命令之外, 裡面

全網最詳細的一個超級好命令工具【Cmder】的安裝之後的一些配置(圖文詳解)

    不多說,直接上乾貨! 1、修改命令提示符λ為$    首先,我們看到    進入解壓後的cmder的目錄,進入vendor,開啟init.bat檔案。   修改第15行的程式碼 @prompt $E[1;32;40m$P$S

全網最詳細的一個超級好命令工具【Cmder】是什麼?

    不多說,直接上乾貨! Cmder是什麼?     一款Windows環境下非常簡潔美觀易用的cmd替代者,它支援了大部分的Linux命令。支援ssh連線linux,使用起來非常方便。比起cmd、powershell、conEmu,其介面美觀簡潔,功能強大。        

一個小時學會 Go 編寫命令工具

![](https://i.loli.net/2020/12/08/DMPGzwab7TyWeo9.jpg) # 前言 最近因為專案需要寫了一段時間的 `Go` ,相對於 `Java` 來說語法簡單同時又有著一些 `Python` 之類的語法糖,讓人大呼”真香“。 ![](https://i.loli.

TextView實現一個簡單的Android資訊顯示工具

本文用 TextView 實現一個在手機上顯示 Android 資訊的工具類。比如涉及到訊號的傳遞時,那種類似日誌記錄的功能。先看圖: 先看佈局檔案的程式碼,注意 TextView 裡面的幾個屬性就可以了。 <?xml version="1.0" encoding="utf-8"

nodejs 寫命令工具

npm 不僅可以管理 nodejs 的依賴關係,它還可以用來打包和分發命令列工具! 建立一個新的 npm 專案: $ npm init 給應用起一個名字:ser,其他輸入項都直接回車,用預設內容。最後,建立了檔案 package.json: { "nam

製作一個Node命令影象識別工具

從 0 開始製作一個 NodeJS 命令列驗證碼識別工具。實現如下效果。 初始化專案 # 建立 recognition 專案 mkdir recognition cd recognition npm init -y # 安裝主依賴 yarn add images tesseract.j

VS的命令工具編譯工程

                作者:朱金燦       在VS2008下面提供了devenv.com命令列方式,我們可以從VS安裝目錄..\MicrosoftVisual Studio 9\Common7\IDE下面找到它,以下是幾個常見用法(VS 2005對應的目錄下也有這樣的工具):用法:devenv.

利用JDK自帶工具構建一個簡單的Java SOAP Web Service

這兩天由於工作的某些原因,需要了解一些關於Web Service的知識,然後在網上看到了這麼一篇簡單的有點略微過時但是對於初次接觸Web Service的同學來說又很有必要了解的文章,於是自己嘗試著將文章翻譯過來。 A. 構造Web服務 1. 構造一個簡單的hello

Nodejs 釋出自己的npm包並製作成命令工具

近日當我在使用npm上已經存在的一個包時,發現它有bug;於是決定自己實現這個功能,自己寫一個npm包。 下面我記錄一下自己的實現過程。 1. npm init 選擇一個資料夾,然後用命令列cd進去,然後執行npm init,這時會生成一長串表單,根據自己的實際情況填寫內容

通過泛型和反射構建一個簡單的集合操作工具

      平時在操作集合物件的時候(比如List);我想一次新增大於一個數據的時候,往往需要通過一個集合物件呼叫兩次add方法,比如: List<Person> personList=new ArrayList<>(); Person p1=n

python測試例覆蓋率工具coverage教程(命令工具)(譯)

歡迎大家光臨我的部落格 簡介 coverage是一個檢測單元測試覆蓋率的工具,即檢查你的測試用例是否覆蓋到了所有的程式碼。 coverage命令列工具   當你通過pip install coverage成功安裝完coverage後,就會在pytho