在 npm scripts 中设置环境变量,最直接的方法是在脚本命令前使用 cross-env 库,或者在 unix/linux/macos 环境下直接使用 var=value command 语法。推荐使用 cross-env 以确保跨平台兼容性,它允许你在 windows、macos 和 linux 上以相同的语法设置变量,例如在 package.json 的 scripts 字段中配置 "start": "cross-env node_env=production node index.js"。这样配置后,运行 npm start 时,子进程就能通过 process.env.node_env 获取到 production 值。

如何在 package.json 中配置跨平台的环境变量?
要在 package.json 中配置跨平台的环境变量,需要安装 cross-env 并将其作为开发依赖。安装完成后,在 scripts 对象中,将环境变量赋值语句放在目标命令之前,用空格分隔。这种写法不区分操作系统,Windows 用户无需使用 set 命令,Unix 用户也无需担心引号转义问题。执行该脚本时,cross-env 会拦截并注入变量,随后启动指定的 Node.js 进程。

npm install cross-env --save-dev
// package.json
{
"scripts": {
"dev": "cross-env NODE_ENV=development PORT=3000 node server.js",
"build": "cross-env NODE_ENV=production node build.js"
}
}
预期结果:运行 npm run dev 时,server.js 中的 process.env.NODE_ENV 为 development,process.env.PORT 为 3000。运行 npm run build 时,process.env.NODE_ENV 为 production,PORT 保持默认或为空。
不使用第三方库如何实现原生环境变量设置?
如果不希望引入 cross-env,可以在 Unix 系统(Linux/macOS)中直接使用 shell 原生的变量赋值语法。在 Windows 系统中,则需要使用 set 命令。由于语法差异,通常建议仅在确定运行环境为 Unix 时使用原生语法,或者编写跨平台的脚本文件来分别处理。原生语法的优势在于零依赖,但缺点是命令在不同终端中表现不一致,且复杂变量可能需要额外的引号保护。

// Unix/Mac 方式
npm run dev:unix
// Windows 方式 (cmd)
npm run dev:win
// package.json
{
"scripts": {
"dev:unix": "NODE_ENV=development node server.js",
"dev:win": "set NODE_ENV=development && node server.js"
}
}
预期结果:在 Unix 终端运行 npm run dev:unix,process.env.NODE_ENV 成功设为 development。在 Windows CMD 运行 npm run dev:win,process.env.NODE_ENV 同样设为 development。若混合使用,可能导致变量未生效或报错。
当环境变量包含特殊字符或空格时如何处理?
当环境变量值包含空格、特殊字符或需要保留引号时,直接赋值可能会因 Shell 解析导致截断或错误。此时应使用引号包裹值,并确保引号在跨平台下被正确传递。在 cross-env 中,可以直接使用单引号或双引号包裹值,它会自动处理转义。而在原生语法中,Windows 的 set 命令对引号的处理较为严格,通常需要避免在值周围加引号,或使用特定的转义序列。对于复杂场景,建议使用 .env 文件配合 dotenv 库加载,而非直接在脚本中硬编码。
// 包含空格的值
npm run test:complex
// package.json
{
"scripts": {
"test:complex": "cross-env GREETING='Hello World' node test.js"
}
}
// test.js
console.log(process.env.GREETING); // 输出: Hello World
预期结果:运行 npm run test:complex,process.env.GREETING 的值为 Hello World,包含空格。若使用原生语法且未正确处理引号,可能只获取到 Hello 或报错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











