node獲取命令行中的參數(shù)詳解
認(rèn)識(shí)process
在開發(fā)cli工具時(shí),往往離不開獲取指令中各種參數(shù)信息,接下來本文將帶著你如何在Node.js中獲取執(zhí)行時(shí)的參數(shù)
process是nodejs內(nèi)置的一個(gè)對(duì)象,該對(duì)象提供了當(dāng)前有關(guān)nodejs進(jìn)程的信息。(例如獲取當(dāng)前進(jìn)程id,執(zhí)行平臺(tái)等與當(dāng)前執(zhí)行進(jìn)程相關(guān)的對(duì)象和方法)
process.arg
在該對(duì)象中,有一個(gè)arg屬性,它可以獲取當(dāng)前node執(zhí)行時(shí)傳入各個(gè)參數(shù)數(shù)據(jù)。
我們創(chuàng)建一個(gè)index.js文件,先打印下process.args里面是什么東西
console.log(process.arg) // node index.js [ 'D:\\software\\nodejs\\node.exe', 'D:\\project\\script\\src\\index.js' ]
從上面的輸出結(jié)果,可以得到當(dāng)前執(zhí)行的node程序路徑(也就是process.execPath返回值)和執(zhí)行的文件(index.js)路徑,我們像使用其他cli工具一樣添加一些參數(shù)試試
node index.js name=zhangsan age=18
[ 'D:\\software\\nodejs\\node.exe', 'D:\\project\\script\\src\\index.js', 'name=zhangsan', 'age=18' ]
可以看到我們傳入的name參數(shù)與age參數(shù)也被獲取到了
需要注意的是argv中的參數(shù)是通過空格來分割的
通常,我們會(huì)在命令行每個(gè)參數(shù)前面添加--字符,用來識(shí)別傳入的各個(gè)參數(shù)。
例如在esbuild構(gòu)建工具中
esbuild app.jsx --bundle --outfile=out.js
例如在vite構(gòu)建工具中
vite --config my-config.js
修改一下上面的命令為
node index.js --name=zhangsan --age=18
將會(huì)得到如下輸出結(jié)果
[ 'D:\\software\\nodejs\\node.exe', 'D:\\project\\script\\src\\index.js', '--name=zhangsan', '--age=18' ]
封裝獲取參數(shù)函數(shù)
從上面兩個(gè)例子和官方文檔中,我們可以得知argv的前兩個(gè)參數(shù)都是固定的,在獲取用戶傳入的參數(shù)我們需要process.argv.slice(2)一下,只獲取從下標(biāo)2開始的元素。 也即是
[ '--name=zhangsan', '--age=18' ]
有了這些數(shù)據(jù)之后,我們需要再進(jìn)一步解構(gòu)里面的參數(shù),將前面的--去除掉,把key=value改變成{key:value}方便我們?cè)陂_發(fā)中進(jìn)行參數(shù)獲取。 最終我們得到了這樣子的函數(shù):
- 獲
process.argv數(shù)組,并切片從下標(biāo)2開始 - 判斷數(shù)組中的每個(gè)值是否為
--開頭,是則視為用戶傳入?yún)?shù) - 同樣進(jìn)行切片操作,獲取下標(biāo)2開始的字符,再通過
=區(qū)分出對(duì)應(yīng)的key和value,其返回的是[key,value] - 最后,將這個(gè)二維數(shù)組傳入到
Object.fromEntries轉(zhuǎn)換為一個(gè)對(duì)象
const arguments = process.argv.slice(2);
const params = Object.fromEntries(
arguments.reduce((pre, item) => {
if (item.startsWith("--")) {
return [...pre, item.slice(2).split("=")];
}
return pre;
}, []),
);
console.log(params)
// { name: 'zhangsan', age: '18' }以上就是node獲取命令行中的參數(shù)詳解的詳細(xì)內(nèi)容,更多關(guān)于node獲取命令行參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
史上無敵詳細(xì)的Node.Js環(huán)境搭建步驟記錄
Node.js是一個(gè)事件驅(qū)動(dòng)I/O服務(wù)端JavaScript環(huán)境,由于其擁有異步非阻塞、環(huán)境搭建簡單、實(shí)踐應(yīng)用快等特性,使得其在新一代編程開發(fā)中更為流行,下面這篇文章主要給大家介紹了關(guān)于Node.Js環(huán)境搭建步驟記錄的相關(guān)資料,需要的朋友可以參考下2023-03-03
node.js平臺(tái)下利用cookie實(shí)現(xiàn)記住密碼登陸(Express+Ejs+Mysql)
這篇文章主要介紹了node.js平臺(tái)下利用cookie實(shí)現(xiàn)記住密碼登陸(Express+Ejs+Mysql),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
node.js中ws模塊創(chuàng)建服務(wù)端和客戶端,網(wǎng)頁WebSocket客戶端
今天小編就為大家分享一篇關(guān)于node.js中ws模塊創(chuàng)建服務(wù)端和客戶端,網(wǎng)頁WebSocket客戶端,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
node學(xué)習(xí)記錄之搭建web服務(wù)器教程
本篇文章主要介紹了詳解node學(xué)習(xí)記錄——搭建web服務(wù)器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
用C/C++來實(shí)現(xiàn) Node.js 的模塊(一)
這篇文章的主要內(nèi)容其實(shí)簡而言之就是——用C/C++來實(shí)現(xiàn) Node.js 的模塊,非常的不錯(cuò),有需要的朋友可以參考下2014-09-09
淺析node連接數(shù)據(jù)庫(express+mysql)
Node是一個(gè)Javascript運(yùn)行環(huán)境(runtime)。實(shí)際上它是對(duì)Google V8引擎進(jìn)行了封裝。V8引 擎執(zhí)行Javascript的速度非??欤阅芊浅:?。Node對(duì)一些特殊用例進(jìn)行了優(yōu)化,提供了替代的API,使得V8在非瀏覽器環(huán)境下運(yùn)行得更好2015-11-11
如何在Nestjs和Vue3中使用socket.io示例詳解
這篇文章主要為大家介紹了如何在Nestjs和Vue3中使用socket.io示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

