背景
cross-env
是一个流行的 npm 包,用于在跨平台(如 Windows、Linux 和 macOS)环境中设置和使用环境变量。它允许你以一致的方式在 npm 脚本中设置环境变量,而不需要担心不同操作系统之间的命令行差异。
为什么需要 cross-env?
- 在 Windows 系统中,设置环境变量的语法(如
set NODE_ENV=production
)与 Unix/Linux/macOS 系统中的语法(如NODE_ENV=production
)不同。 - 如果你在
package.json
的scripts
部分中直接使用环境变量设置命令,那么这些命令在 Windows 上可能无法正常工作(大多数Windows
命令提示将会阻塞(报错)。 - 除非你对 Windows 进行了特别的处理或使用了条件语句来区分操作系统。
cross-env
通过提供一个简单的命令行接口来解决这个问题,它允许你使用单一的命令格式来设置环境变量,这个命令格式在所有操作系统上都是兼容的。
简单说明 cross-env,就是针对相同的语句和命令,希望这条语句能够同时在 Windows 和 Linux 上同样适用。
如何使用 cross-env?
首先,你需要安装 cross-env
。这可以通过 npm 或 yarn 完成:
npm install --save-dev cross-env
# 或者
yarn add --dev cross-env
安装完成后,你可以在 package.json
的 scripts
部分中使用 cross-env
来设置环境变量。例如,如果你想在开发环境中设置 NODE_ENV
为 development
,并在生产环境中设置 NODE_ENV
为 production
,你可以这样做:
"scripts": {
"start": "cross-env NODE_ENV=development node app.js",
"build": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js"
}
全局获取环境变量
process.env.NODE_ENV
现在,无论你在哪个操作系统上运行 npm run start
或 npm run build
,cross-env
都会确保 NODE_ENV
环境变量被正确设置。
注意事项
cross-env
需要在你的 npm 脚本命令的最前面,以确保它首先被执行。- 尽管
cross-env
提供了跨平台的环境变量设置功能,但请记得,环境变量一旦设置,就会在当前 shell 会话中保持有效,直到会话结束。因此,在某些情况下(如自动化脚本或持续集成/持续部署流程中),你可能需要特别小心处理环境变量的设置和清理。