Node.js:如何使用 shell 命令传递环境变量?

标签 node.js shell environment-variables

我试图在 Node.js 脚本中生成特定值,然后将它们作为环境变量传递给 shell 命令,但我似乎无法让它工作。在传递我自己的环境变量时,从 Node.js 将字符串作为 shell 命令执行的正确方法是什么?

以下内容似乎没有按我的预期工作:

const shell = require("shelljs");
const { findPort } = require("./find-port");

async function main() {
  // imagine that `findPort(value)` starts at the provided `value` and
  // increments it until it finds an available port
  const PORT = await findPort(8000); // 8000, 8001, etc
  const DB_PORT = await findPort(3306); // 3306, 3307, etc

  shell.exec(`yarn run dev`, {
    env: {
      PORT,
      DB_PORT,
    },
    async: true,
  });
}

main();

当我尝试运行此程序时,出现以下错误:

env: node: No such file or directory

重要提示:我不希望任何值从这个特定脚本中泄漏,这就是为什么我试图避免使用 export FOO=bar 语法,但我可能会误解它是如何发生的有效。

我更喜欢使用 shelljs 的解决方案,但我对使用 child_process.execexeca 的其他解决方案持开放态度,等等

最佳答案

该脚本完全按照您的要求进行:它使用您的环境变量运行yarn run dev。不幸的是,这意味着它使用yarn依赖的系统环境变量(例如PATH)运行。

您可以使用您的变量和系统变量来运行它:

  shell.exec(`yarn run dev`, {
    env: {
      ...process.env,
      PORT,
      DB_PORT,
    }
  });

关于Node.js:如何使用 shell 命令传递环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805784/

相关文章:

javascript - Webpack/Node.js Http 模块 : http. createServer 不是函数

javascript - 服务器触发客户端事件两次

javascript - 重新创建具有相同权限的 channel

linux - 使用 perl one-liner 解析电子邮件列表

python - 进程完成后如何杀死终端

linux - 比较两个文件并以表格形式显示差异 Linux shell 脚本

php - 如何在 PHP 中设置环境变量?

Node.js 显示 [object Object] 而不是 result.row

environment-variables - 如何在生产环境中设置 ASP.NET 5 环境变量

java - mac设置环境变量