对于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
脚本。
分步指南:
- 创建
./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
脚本。
- 跨平台