Node.js CLI应用如何在package.json的bin中加载.env文件?
解决Node.js CLI原生
--env-file在package.json bin字段不生效的问题 问题出在你package.json的bin字段写法上——bin字段中的命令必须明确调用node执行脚本,你之前的写法缺少了node前缀,系统无法识别该用什么程序来处理后面的参数和文件路径。
正确配置步骤
1. 修正package.json的bin字段
将bin字段的命令改为包含node的完整指令,同时确保脚本路径是相对项目根目录的正确路径:
{ "name": "myapp", "version": "1.0.0", "description": "", "main": "app.js", "type": "module", "bin": { "mycli": "node --env-file=config.env ./apps/app.js" }, "keywords": [] }
注意:如果
config.env不在项目根目录,需要调整--env-file后的路径(比如./config/config.env);./apps/app.js是相对package.json的脚本路径,避免使用绝对路径导致跨环境问题。
2. 重新链接本地CLI命令
修改配置后,需要重新执行本地包链接命令,让系统更新mycli命令的关联:
npm link
(如果用yarn则执行yarn link)
3. 验证.env加载效果
在你的app.js中添加测试代码,确认环境变量是否正确加载:
// app.js console.log("测试环境变量:", process.env.YOUR_KEY_NAME);
运行mycli命令,如果能打印出config.env中对应键的值,说明配置生效。
额外注意事项
- 确保你的
config.env是标准格式:每行一个键值对,比如API_KEY=abc123,不要给值加不必要的引号(除非值本身包含空格或特殊字符)。 - Node 20.6.0+原生支持
--env-file,但仅在调用node命令时生效,无法直接通过脚本文件头(比如#!/usr/bin/env node)传递该参数,所以必须在bin字段中明确写全node --env-file=...指令。
内容的提问来源于stack exchange,提问作者Herman
相关产品推荐
相关产品推荐

