Node.js 获取 CLI 指定的环境变量

简介: 当我们在使用 Node.js 开发 CLI 的时候,可能碰到的问题是,想知道用户设置了哪些环境变量,或者用户对环境变量做了哪些修改。本文提供一个通用的简单思路来处理这个问题。 首先想要获取用户新设置的或者修改过的环境变量,就需要有个参照对象,也就是旧的环境变量,那么就需要获取默认的,原本的环境变量。 我们都知道在 *nix 系统中,一个进程被创建的本质是从父进程 fork 一个一模一样

当我们在使用 Node.js 开发 CLI 的时候,可能碰到的问题是,想知道用户设置了哪些环境变量,或者用户对环境变量做了哪些修改。本文提供一个通用的简单思路来处理这个问题。

首先想要获取用户新设置的或者修改过的环境变量,就需要有个参照对象,也就是旧的环境变量,那么就需要获取默认的,原本的环境变量。

我们都知道在 *nix 系统中,一个进程被创建的本质是从父进程 fork 一个一模一样的过程,CLI 中执行一个 Node 脚本,本质是 shell 在 fork 一个新进程,而这个 fork 的过程中子进程的默认环境变量通常是从父进程继承而来 —— 也即,想要获取当前进程的默认环境变量,只需要获取父进程当前的环境变量即可。

父进程的环境变量,可以通过 ps 命令获取,例如:

$ node
Welcome to Node.js v13.11.0.
Type ".help" for more information.
> child_process.execSync('ps eww -o command "' + process.ppid + '"').toString()

就可以获取到结果:

COMMAND
-zsh TERM_SESSION_ID=w1t0p0:7762E31B-9E3B-49F5-8854-13C984A1DB2E SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.tLslpJYN8w/Listeners LC_TERMINAL_VERSION=3.3.9 Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.3MB4xNxZF1/Render COLORFGBG=7;0 ITERM_PROFILE=Default XPC_FLAGS=0x0 PWD=/Users/lellansinhuang/workspace/function-runtime SHELL=/bin/zsh SECURITYSESSIONID=186a7 LC_CTYPE=UTF-8 TERM_PROGRAM_VERSION=3.3.9 TERM_PROGRAM=iTerm.app PATH=/usr/bin:/bin:/usr/sbin:/sbin LC_TERMINAL=iTerm2 COLORTERM=truecolor COMMAND_MODE=unix2003 TERM=xterm-256color HOME=/Users/lellansinhuang TMPDIR=/var/folders/rs/kwwwgtmx02gcwk2pglb95yj40000gp/T/ USER=lellansinhuang XPC_SERVICE_NAME=0 LOGNAME=lellansinhuang ITERM_SESSION_ID=w1t0p0:7762E31B-9E3B-49F5-8854-13C984A1DB2E __CF_USER_TEXT_ENCODING=0x1F6:0x0:0x0

这个是 ps 命令出来的格式,需要通过 split 等方式处理一下才能变成 json 格式。拿到这个数据之后,在于当前进程的 process.env 中的当前进程的环境变量进行 diff 操作,即可获取到:

  • 用户新加的环境变量
  • 用户修改的环境变量
  • 用户当前 shell 下新 export 的环境变量
目录
相关文章
|
8月前
|
JavaScript 前端开发 Java
Vue路由与nodejs下载安装及环境变量的配置
Vue路由与nodejs下载安装及环境变量的配置
55 0
|
1月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
283 1
|
1月前
|
JavaScript 前端开发 Java
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)
58 0
|
7月前
|
缓存 JavaScript NoSQL
nodejs 环境变量配置
nodejs 环境变量配置
53 0
nodejs 环境变量配置
|
Web App开发 缓存 JavaScript
Windows下的Node.js安装与环境变量配置
Windows下的Node.js安装与环境变量配置
1468 1
|
JavaScript 前端开发 Shell
如何运行Node.js脚本及读取环境变量
如何运行Node.js脚本及读取环境变量
|
JavaScript Shell Linux
-bash: grunt: command not found去环境变量添加nodejs的路径
-bash: grunt: command not found去环境变量添加nodejs的路径
110 0
|
存储 JavaScript Shell
Nodejs ejs 实现cli
Nodejs ejs 实现cli
76 0
|
JavaScript
Node.js:cross-env跨平台设置和使用环境变量
Node.js:cross-env跨平台设置和使用环境变量
276 0
|
JavaScript
Node.js:Dotenv从`.env` 文件加载环境变量的库
Node.js:Dotenv从`.env` 文件加载环境变量的库
83 0