用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。
如果你在dependencies
、devDependencies
配置項中提前設定了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)。
建立一個package 清單
package 清單(即‘package.json’ 檔案),它裡面含有基本資訊,例如包名稱(package name),版本號(version)。
如果你想給你的package限定使用範圍,供你的內部團隊使用時,你可以考慮使這個包成為private package,設定的範圍應該是你的使用者名稱。$ npm init --scope=xxx
建立一個可被執行的指令碼檔案
因為我們想要執行命令列,但是前提是我們需要用一個直譯器去啟動檔案(有時候我們稱為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" } }
- 確保命令可用
為了測試你的命令被拾取到,使用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')
- 使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: 新增其他兩個命令
新增 bin/push/js
# /user/bin/env node $ var shell = require('shelljs') $ shell.exec('git push origin master --force')
新增 bin/deploy.js
我們通過定義過的其他指令進行合併
#! /node/env node var shell = require("shelljs") shell.exec("github-pages-commit && github-pages-push")
對映指令檔案
{ "github-pages-commit":"bin/commit.js", "github-pages-push":"bin/push.js", "githuv-pages-deploy":"bin/deploy.js" }
再次執行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