Home  >  Article  >  Web Front-end  >  How to get parameters from the command line in node

How to get parameters from the command line in node

青灯夜游
青灯夜游forward
2022-11-09 20:56:242658browse

How to get parameters from the command line in node

在开发cli工具时,往往离不开获取指令中各种参数信息,接下来本文将带着你如何在Node.js中获取执行时的参数。【相关教程推荐:nodejs视频教程 、编程视频

认识process

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' }

更多编程相关知识,请访问:编程教学!!

The above is the detailed content of How to get parameters from the command line in node. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:juejin.cn. If there is any infringement, please contact admin@php.cn delete