node.js極速入門課程:進入學習
在開發cli
工具時,往往離不開獲取指令中各種參數信息,接下來本文將帶著你如何在Node.js
中獲取執行時的參數。【相關教程推薦:nodejs視頻教程 、編程視頻】
認識process
process
是nodejs
內置的一個對象,該對象提供了當前有關nodejs
進程的信息。(例如獲取當前進程id,執行平臺等與當前執行進程相關的對象和方法)
node process文檔
process.arg
在該對象中,有一個arg屬性,它可以獲取當前node執行時傳入各個參數數據。
我們創建一個index.js文件,先打印下process.args里面是什么東西
console.log(process.arg) // node index.js [ 'D:\software\nodejs\node.exe', 'D:\project\script\src\index.js' ]
登錄后復制
從上面的輸出結果,可以得到當前執行的node程序路徑(也就是process.execPath
返回值)和執行的文件(index.js
)路徑,我們像使用其他cli
工具一樣添加一些參數試試
node index.js name=zhangsan age=18
登錄后復制
[ 'D:\software\nodejs\node.exe', 'D:\project\script\src\index.js', 'name=zhangsan', 'age=18' ]
登錄后復制
可以看到我們傳入的name
參數與age
參數也被獲取到了
需要注意的是argv中的參數是通過空格來分割的
通常,我們會在命令行每個參數前面添加--
字符,用來識別傳入的各個參數。
例如在esbuild
構建工具中
esbuild app.jsx --bundle --outfile=out.js
登錄后復制
例如在vite
構建工具中
vite --config my-config.js
登錄后復制
修改一下上面的命令為
node index.js --name=zhangsan --age=18
登錄后復制
將會得到如下輸出結果
[ 'D:\software\nodejs\node.exe', 'D:\project\script\src\index.js', '--name=zhangsan', '--age=18' ]
登錄后復制
封裝獲取參數函數
從上面兩個例子和官方文檔中,我們可以得知argv的前兩個參數都是固定的,在獲取用戶傳入的參數我們需要process.argv.slice(2)
一下,只獲取從下標2開始的元素。 也即是
[ '--name=zhangsan', '--age=18' ]
登錄后復制
有了這些數據之后,我們需要再進一步解構里面的參數,將前面的--
去除掉,把key=value
改變成{key:value}
方便我們在開發中進行參數獲取。 最終我們得到了這樣子的函數:
- 獲
process.argv
數組,并切片從下標2開始 - 判斷數組中的每個值是否為
--
開頭,是則視為用戶傳入參數 - 同樣進行切片操作,獲取下標2開始的字符,再通過
=
區分出對應的key
和value
,其返回的是[key,value]
- 最后,將這個二維數組傳入到
Object.fromEntries
轉換為一個對象
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' }
登錄后復制