You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中子进程如何访问父进程的全局变量?

如何在Node.js子进程中访问主进程的全局变量?

这是个典型的Node.js进程间通信问题——子进程和主进程是完全独立的运行实例,各自拥有独立的内存空间,所以主进程里的global.abc根本没法直接被子进程感知到。下面给你几个实用的解决方案,按需挑选:

方案1:通过环境变量传递

这是最直接的方式之一,把变量注入到子进程的环境变量中,子进程通过process.env就能轻松获取:

主进程代码修改:

import ChildProcess = require("child_process");
import path = require("path"); // 别忘了引入path模块

global.abc = "token";
// 基于当前系统环境变量,添加我们的自定义变量
const childEnv = { ...process.env, ABC_TOKEN: global.abc };

ChildProcess.spawn("node", [path.join(process.cwd(), "./install-db.js")], {
  env: childEnv,
  stdio: "inherit" // 可选配置,让子进程的输出同步到主进程控制台
});

子进程(install-db.js)获取变量:

const token = process.env.ABC_TOKEN;
console.log(token); // 输出:token

方案2:通过命令行参数传递

如果变量内容简单(无特殊字符),可以直接作为命令行参数传给子进程:

主进程代码修改:

import ChildProcess = require("child_process");
import path = require("path");

global.abc = "token";

ChildProcess.spawn("node", [
  path.join(process.cwd(), "./install-db.js"),
  global.abc // 把token作为参数传递
], { stdio: "inherit" });

子进程(install-db.js)获取变量:

// process.argv前两个固定是node路径和当前脚本路径,第三个开始是自定义参数
const token = process.argv[2];
console.log(token); // 输出:token

方案3:通过IPC通道传递(使用fork而非spawn)

如果需要更灵活的双向通信,建议用child_process.fork()——它是spawn的特殊版本,内置了IPC通道,支持进程间互发消息:

主进程代码修改:

import { fork } from "child_process";
import path = require("path");

global.abc = "token";

const child = fork(path.join(process.cwd(), "./install-db.js"));
// 向子进程发送携带token的消息
child.send({ type: "TOKEN", data: global.abc });

// 可选:监听子进程的回复消息
child.on("message", (msg) => {
  console.log("子进程回复:", msg);
});

子进程(install-db.js)获取变量:

process.on("message", (msg) => {
  if (msg.type === "TOKEN") {
    const token = msg.data;
    console.log(token); // 输出:token
    // 可选:给主进程回复确认消息
    process.send("已成功接收token");
  }
});

方案4:通过标准输入(stdin)传递

如果变量是字符串或可序列化的数据,也可以通过主进程向子进程的标准输入写入数据:

主进程代码修改:

import ChildProcess = require("child_process");
import path = require("path");

global.abc = "token";

const child = ChildProcess.spawn("node", [path.join(process.cwd(), "./install-db.js")]);

// 发送数据,记得加换行符(方便子进程按行读取)
child.stdin.write(global.abc + "\n");
child.stdin.end(); // 关闭输入流,告知子进程数据已发送完毕

子进程(install-db.js)获取变量:

process.stdin.on("data", (data) => {
  const token = data.toString().trim(); // 去除换行符和多余空格
  console.log(token); // 输出:token
});

内容的提问来源于stack exchange,提问作者UDIT SONI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:56:32