node获取命令行中的参数详解

 更新时间:2022年11月08日 15:13:02   作者:_island  
这篇文章主要为大家介绍了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获取命令行参数的资料请关注脚本之家其它相关文章!

相关文章

  • 史上无敌详细的Node.Js环境搭建步骤记录

    史上无敌详细的Node.Js环境搭建步骤记录

    Node.js是一个事件驱动I/O服务端JavaScript环境,由于其拥有异步非阻塞、环境搭建简单、实践应用快等特性,使得其在新一代编程开发中更为流行,下面这篇文章主要给大家介绍了关于Node.Js环境搭建步骤记录的相关资料,需要的朋友可以参考下
    2023-03-03
  • node.js 抓取代理ip实例代码

    node.js 抓取代理ip实例代码

    这篇文章主要介绍了node.js 抓取代理ip实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)

    node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)

    这篇文章主要介绍了node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • 一文带你了解Node.js进程管理工具PM2

    一文带你了解Node.js进程管理工具PM2

    Node.js进程管理工具PM2是一个开源的工具,用于管理和监控Node.js应用程序的运行,它可以帮助您方便地启动、停止、重启和监视多个Node.js进程,并提供了许多有用的功能,所以本文就和大家一起了解一下PM2,需要的朋友可以参考下
    2023-07-07
  • node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    今天小编就为大家分享一篇关于node.js中ws模块创建服务端和客户端,网页WebSocket客户端,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • node学习记录之搭建web服务器教程

    node学习记录之搭建web服务器教程

    本篇文章主要介绍了详解node学习记录——搭建web服务器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • node中使用log4js4.x版本记录日志的方法

    node中使用log4js4.x版本记录日志的方法

    这篇文章主要介绍了node中使用log4js4.x版本记录日志的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 用C/C++来实现 Node.js 的模块(一)

    用C/C++来实现 Node.js 的模块(一)

    这篇文章的主要内容其实简而言之就是——用C/C++来实现 Node.js 的模块,非常的不错,有需要的朋友可以参考下
    2014-09-09
  • 浅析node连接数据库(express+mysql)

    浅析node连接数据库(express+mysql)

    Node是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好
    2015-11-11
  • 如何在Nestjs和Vue3中使用socket.io示例详解

    如何在Nestjs和Vue3中使用socket.io示例详解

    这篇文章主要为大家介绍了如何在Nestjs和Vue3中使用socket.io示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论