Npm做cli命令列工具
這次帶給大家Npm做cli命令列工具,Npm做cli命令列工具的注意事項有哪些,下面就是實戰案例,一起來看一下。
前言
# 如果你想寫一個npm插件,如果你想透過命令列來簡化自己的操作,如果你也是個懶惰的人,那麼這篇文章值得一看。
po主的上一篇文章介紹了自訂自己的模版,但這樣po主還是不滿足啊,專案中我們頻繁的需要新建一些頁面,邏輯樣式等文件,每次都手動new一個,然後複製一些基本程式碼進去非常的麻煩,所以就有這篇文章了。接下來就讓po主為大家一步一步示範怎麼做一個npm命令列插件。
註冊npm帳戶
# 發布npm插件,首先肯定要有個npm帳號了,過程就不囉嗦了,走你。
npm官網
有了帳號後,我們透過npm init 產生一個package設定檔,填寫一些你的信息,然後就可以開始寫邏輯程式碼了。
編寫指令入口
# 首先來看看專案結構
. ├── bin //命令配置 ├── README.md //说明文档 ├── index.js //主入口 ├── src //功能文件 ├── package.json //包信息 └── test //测试用例
實例命令程式碼都是寫在bin目錄下,我們現在設定檔package檔中啟用指令,新增一個設定項bin
"bin": { "xu": "./bin/xu.js" },
然後安裝一個依賴,TJ大神寫的commander插件,
npm i commander --save
有了這個工具我們可以很方便的寫命令程式碼
# xu.js
#!/usr/bin/env node process.title = 'xu'; require('commander') .version(require('../package').version) .usage('<command> [options]') .command('generate', 'generate file from a template (short-cut alias: "g")') .parse(process.argv) require('./xu-generate'); >>引入
這個檔案可以看作是入口檔案,第一行程式碼是必須新增的,腳本用env啟動的原因,是因為腳本解釋器在linux中可能被安裝在不同的目錄,env可以在系統的PATH目錄中查找。同時,env也規定一些系統環境變數。 這種寫法主要是為了讓你的程式在不同的系統上都能適用。
在這一步,你可以簡單測試你自己的npm外掛
$ node ./bin/xu.js >>> 输出一些插件usage。help信息
# 關於commander,大家可以去作者的Github先學習了解,這裡不對參數講解。
xu-generate.js
#!/usr/bin/env node const program = require('commander'); const chalk = require('chalk') const xu = require('../src/generate'); /** * Usage. */ program .command('generate') .description('quick generate your file') .alias('g') .action(function(type, name){ xu.run(type, name); }); program.parse(process.argv);
編寫功能函數
# ./src/generate.js# 這個檔案就定義了當我們輸入$ xu g
/** * Created by xushaoping on 17/10/11. */ const fs = require('fs-extra') const chalk = require('chalk') exports.run = function(type, name) { switch (type) { case 'page': const pageFile = './src/page/' + name + '/' + name + '.vue' const styleFile = './src/page/' + name + '/' + name + '.less' fs.pathExists(pageFile, (err, exists) => { if (exists) { console.log('this file has created') } else { fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/page.vue', pageFile, err => { if (err) return console.error(err) console.log(pageFile + ' has created') }) fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/page.less', styleFile, err => { if (err) return console.error(err) console.log(styleFile + ' has created') }) } }) break; case 'component': const componentFile = './src/components/' + name + '.vue' fs.pathExists(componentFile, (err, exists) => { if (exists) { console.log('this file has created') } else { fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/component.vue', componentFile, err => { if (err) return console.error(err) console.log(componentFile + ' has created') }) } }) break; case 'store': const storeFile = './src/store/modules' + name + '.js' fs.pathExists(storeFile, (err, exists) => { if (exists) { console.log('this file has created') } else { fs.copy('/usr/local/lib/node_modules/vue-xu-generate/src/template/store.js', storeFile, err => { if (err) return console.error(err) console.log(storeFile + ' has created') }) } }) break; default: console.log(chalk.red(`ERROR: uncaught type , you should input like $ xu g page demo` )) console.log() console.log(' Examples:') console.log() console.log(chalk.gray(' # create a new page')) console.log(' $ xu g page product') console.log() console.log(chalk.gray(' # create a new component')) console.log(' $ xu g component product') console.log() console.log(chalk.gray(' # create a new store')) console.log(' $ xu g store product') console.log() break; } };
$ npm i fs-extra --save $ npm i chalk --save
本地測試
npm套件開發不像web開發,可以直接在瀏覽器看,實例目錄下建立一個test文件,然後 node test 就可以測試我們的邏輯。如果有一些功能需要在發布後才能測,npm 有個 link指令 可以連接你本地的模組,當然你也可以發佈後 自己安裝插件測試,就跟平常引入一個插件一樣。發布npm套件
# 首先在專案根目錄執行npm登陸$ npm login $ npm publish
$ npm config set registry https://registry.npmjs.org/
後記
###至此,一個入門級的npm包就製作完成了。萬分感慨,記得剛入門前端的時候看到別人的插件做的真牛,自己只要簡單安裝一下就能搞得那麼漂亮,想搞~但是看到一堆陌生的東西,立刻慫了(node環境,東西非常非常多,直接拷貝vue-cli看到一對代碼,一頭霧水。 學習是一個循序漸進的過程,大牛寫出來的東西,沒有一定的基礎,和長時間的累積經驗,原始碼是很難學習。非要啃,也行,只是效率感覺不如循序漸進來的好。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
用AngualrJs使用定時器ReactJS操作表單選擇 ################################################## ####以上是Npm做cli命令列工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Debian系統中的readdir函數是用於讀取目錄內容的系統調用,常用於C語言編程。本文將介紹如何將readdir與其他工具集成,以增強其功能。方法一:C語言程序與管道結合首先,編寫一個C程序調用readdir函數並輸出結果:#include#include#includeintmain(intargc,char*argv[]){DIR*dir;structdirent*entry;if(argc!=2){

本文探討如何在Debian系統上提升Hadoop數據處理效率。優化策略涵蓋硬件升級、操作系統參數調整、Hadoop配置修改以及高效算法和工具的運用。一、硬件資源強化確保所有節點硬件配置一致,尤其關注CPU、內存和網絡設備性能。選擇高性能硬件組件對於提升整體處理速度至關重要。二、操作系統調優文件描述符和網絡連接數:修改/etc/security/limits.conf文件,增加系統允許同時打開的文件描述符和網絡連接數上限。 JVM參數調整:在hadoop-env.sh文件中調整

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信

在Debian郵件服務器上安裝SSL證書的步驟如下:1.安裝OpenSSL工具包首先,確保你的系統上已經安裝了OpenSSL工具包。如果沒有安裝,可以使用以下命令進行安裝:sudoapt-getupdatesudoapt-getinstallopenssl2.生成私鑰和證書請求接下來,使用OpenSSL生成一個2048位的RSA私鑰和一個證書請求(CSR):openss

網站性能優化離不開對訪問日誌的深入分析。 Nginx日誌記錄了用戶訪問網站的詳細信息,巧妙利用這些數據,可以有效提升網站速度。本文將介紹幾種基於Nginx日誌的網站性能優化方法。一、用戶行為分析與優化通過分析Nginx日誌,我們可以深入了解用戶行為,並據此進行針對性優化:高頻訪問IP識別:找出訪問頻率最高的IP地址,針對這些IP地址優化服務器資源配置,例如增加帶寬或提升特定內容的響應速度。狀態碼分析:分析不同HTTP狀態碼(例如404錯誤)出現的頻率,找出網站導航或內容管理中的問題,並進

在Debian系統上升級Zookeeper版本,可以按照以下步驟進行:1.備份現有配置和數據在進行任何升級之前,強烈建議備份現有的Zookeeper配置文件和數據目錄。 sudocp-r/var/lib/zookeeper/var/lib/zookeeper_backupsudocp/etc/zookeeper/conf/zoo.cfg/etc/zookeeper/conf/z

在Debian系統中,OpenSSL是一個重要的庫,用於加密、解密和證書管理。為了防止中間人攻擊(MITM),可以採取以下措施:使用HTTPS:確保所有網絡請求使用HTTPS協議,而不是HTTP。 HTTPS使用TLS(傳輸層安全協議)加密通信數據,確保數據在傳輸過程中不會被竊取或篡改。驗證服務器證書:在客戶端手動驗證服務器證書,確保其可信。可以通過URLSession的委託方法來手動驗證服務器

在Debian上管理Hadoop日誌,可以遵循以下步驟和最佳實踐:日誌聚合啟用日誌聚合:在yarn-site.xml文件中設置yarn.log-aggregation-enable為true,以啟用日誌聚合功能。配置日誌保留策略:設置yarn.log-aggregation.retain-seconds來定義日誌的保留時間,例如保留172800秒(2天)。指定日誌存儲路徑:通過yarn.n
