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);# 這就是功能指令,定義了一個generate指令,.alias('g')是該指令的縮寫,然後.action(function(type, name){xu.run(type, name); });傳回一個函數,這個函數就是我們定義這個指令需要做什麼。
編寫功能函數
# ./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; } };這裡有2個新的依賴,分別是指令輸出顏色和一個檔案操作的插件,透過npm安裝。
$ npm i fs-extra --save $ npm i chalk --save這個js檔案導出了一個run函數給xu-generate.js調用,我們透過參數拿到了使用者輸入的type,name,然後就可以根據type透過node fs模組(這裡用了一個依賴,但原理還是fs)操作把template檔案複製了一份到你的專案中。 到這,我們就已經完成了一個指令的開發,這個指令可以快速產生專案的模版檔。
本地測試
npm套件開發不像web開發,可以直接在瀏覽器看,實例目錄下建立一個test文件,然後 node test 就可以測試我們的邏輯。如果有一些功能需要在發布後才能測,npm 有個 link指令 可以連接你本地的模組,當然你也可以發佈後 自己安裝插件測試,就跟平常引入一個插件一樣。發布npm套件
# 首先在專案根目錄執行npm登陸$ npm login $ npm publish如果這裡有個報錯,可能是你使用了cnpm位址,需要把npm倉庫設定回來
$ npm config set registry https://registry.npmjs.org/然後,更新更新npm包,版本號碼需要大於上次
後記
###至此,一個入門級的npm包就製作完成了。萬分感慨,記得剛入門前端的時候看到別人的插件做的真牛,自己只要簡單安裝一下就能搞得那麼漂亮,想搞~但是看到一堆陌生的東西,立刻慫了(node環境,東西非常非常多,直接拷貝vue-cli看到一對代碼,一頭霧水。 學習是一個循序漸進的過程,大牛寫出來的東西,沒有一定的基礎,和長時間的累積經驗,原始碼是很難學習。非要啃,也行,只是效率感覺不如循序漸進來的好。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
用AngualrJs使用定時器ReactJS操作表單選擇 ################################################## ####以上是Npm做cli命令列工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

2025年8月Solana價格預測存在三種情景:1. 樂觀情景下,若網絡穩定性提升且生態繁榮,價格可達$550-$800;2. 中性情景下,網絡穩定、生態穩步發展,價格區間為$300-$500;3. 悲觀情景下,若網絡問題頻發、生態萎縮並遭遇熊市,價格可能回落至$100-$250;投資者可選擇幣安、歐易、火幣、Gate.io、KuCoin或Coinbase等平台進行交易,這些平台提供良好的流動性與安全性,適合不同類型的投資者參與Solana市場。

在數字貨幣這個充滿變數與機遇的領域,將五千本金增長至五十萬,意味著需要實現一百倍的資產增值。這並非一個簡單的數學遊戲,而是一場涉及認知、策略、心態和執行力的綜合考驗。它要求參與者不能僅僅依賴運氣,更需要具備敏銳的市場洞察力和超乎常人的風險管理能力。

狗狗币(DOGE)在2025年价格有望达到$0.40至$0.80的乐观区间,前提是市场进入牛市且有实质性应用落地,否则可能在$0.10至$0.25间徘徊;1、2025年价格受市场周期和名人效应驱动,尤其取决于埃隆·马斯克相关企业是否采用DOGE支付;2、2026至2027年可能经历牛市回调,价格出现显著回落;3、至2030年,若DOGE能拓展广泛的应用场景并提升技术性能,长期价格或可稳定在$1.00甚至更高;4、若无法转型为实用型资产,仅依赖社区和名人效应,其吸引力或将减弱,价格长期停滞或被新兴

從三千到三十萬,意味著尋求百倍的回報。這在加密世界並非天方夜譚,但它要求執行者俱備極高的認知水平、堅韌的心態和精準的操作。這並非一條安逸的道路,而是一場高風險、高回報的博弈。通往這個目標的路徑需要精心設計和嚴格執行。

目錄什麼是成交量?成交量與價格的關係成交量對於交易有什麼用處?使用成交量時的注意事項1.成交量的放大不一定是利多2.異常成交量須搭配基本面與消息面解讀3.不同行情階段下的成交量解讀差異極大4.留意成交量造假的可能性(假量、刷量、閃電交易)5.小型股與冷門股的成交量參考性有限6.成交量必須搭配價格型態與技術指標綜合分析OANDA提供獨有的「持倉數據圖表」OANDA未平倉量(OpenPosition)交易原理與應用又是如何?第一象限第

目錄Meme熱度依舊:VINE、DONKEY繼續上漲技術敘事升溫:AI與隱私計算受熱捧跨鏈、RWA與區域性敘事:OMNI嶄露頭角火幣HTX財富效應持續釋放關於火幣HTX7月28日至8月4日,全球加密市場維持震盪格局,熱點輪動節奏加快。本周火幣HTX上線資產中,Meme、AI、隱私計算、跨鍊及RWA等多個賽道齊頭並進,市場財富效應持續顯現。這也是火幣HTX自7月以來連續第五週實現上新資產集體上漲,進一步驗證其在前沿項目挖掘與生態佈局上的前瞻性,持續為用戶把握新一輪市場週期提供有力支持。火幣(HTX

在討論加密貨幣的世界時,你可能會聽到一個聽起來有些神秘又帶點貶義的詞——“老鼠倉”。這個詞並非幣圈獨有,它源於傳統金融市場,但其在去中心化、監管尚不完善的幣圈環境中,表現得更加淋漓盡致。要理解它,我們可以先從字面意思入手,想像一個糧倉裡有隻老鼠,它總能在主人開倉放糧之前,偷偷地、提前地把最好的糧食叼回自己的洞裡。這個生動的比喻,恰恰揭示了“老鼠倉”行為的核心。

判斷比特幣的買賣時機是一個複雜的過程,它涉及到對市場多維度信息的綜合解讀。交易者和投資者通常會藉助一系列工具和方法來分析市場動態,力求在波動的市場中找到相對有利的入場點和出場點。這並非一種精確的科學,更像是一門基於數據和經驗的藝術。掌握一些核心的分析方法,有助於更理性地審視市場,從而做出更為審慎的決策。
