node獲取命令行中的參數詳解

認識process

在開發cli工具時,往往離不開獲取指令中各種參數信息,接下來本文將帶著你如何在Node.js中獲取執行時的參數

processnodejs內置的一個對象,該對象提供瞭當前有關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開始的字符,再通過=區分出對應的keyvalue,其返回的是[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' }

以上就是node獲取命令行中的參數詳解的詳細內容,更多關於node獲取命令行參數的資料請關註WalkonNet其它相關文章!

推薦閱讀: