如何以跨平台方式设置环境变量

How to set environment variables in a cross-platform way?

本文关键字:设置 环境变量 方式 跨平台      更新时间:2023-09-26

对于Windows,我的Node脚本应该是这样的:

"scripts": {
    "start-docs": "SET NODE_ENV=development&&babel-node ./docs/Server.js"
}

但是在Linux上没有SET,所以它会像这样:

"scripts": {
    "start-docs": "NODE_ENV=development&&babel-node ./docs/Server.js"
}

是否有一种方法来声明环境变量的方式是一致的和跨平台的?

我最近遇到了一个跨环境项目。非常直接

{
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
  }
}

无论操作系统如何,将build环境变量设置为production

我反对在package中设置这个。因为环境变量应该根据您的环境while包进行设置。Json很可能对每个环境都是相同的(您将它提交到版本控制系统,对吧?)相反,如果你正在寻找一个干净和通用的解决方案,你应该使用像dotenv这样的东西。

如果你不想使用任何第三方工具,有一个简单的方法来实现这一点,使用nodejs脚本。

分步指南:

  1. 创建./scripts/set-env.js文件,内容如下:

import { argv, env } from "node:process"
import { spawn } from "node:child_process"
// Set your custom env variables here
const extenv = {
    NODE_ENV: "development",
}
spawn(argv[2], argv.slice(3), {
    env: { ...env, ...extenv },
    stdio: "inherit",
})

指出:

  • argv[2]是一个传入命令,在子shell
  • 中运行。
  • argv.slice(3) -传入参数
  • ...env -用于保存当前shell环境变量
  • stdio: "inherit" -用于将子shell输出管道到当前shell
编辑package.json的脚本部分:

"scripts": {
    "set-env": "node ./scripts/set-env.js",
    "start-docs": "npm run set-env -- babel-node ./docs/Server.js"
}

注意:--用于传递命令和参数给set-env脚本。

优势
    跨平台
  • 无第三方依赖
  • 完全可定制的