You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js配置多环境.env文件时报ERR_INVALID_ARG_TYPE错误如何解决

错误根因
  • __dirname是CommonJS规范下的全局变量,不属于path模块的内置属性,代码中path.__dirname的写法本身错误,取值为undefined
  • 代码使用import语法属于ES Module(ESM)模式,该模式下默认没有全局__dirname、__filename变量,直接调用也会返回undefined
  • 两个错误叠加导致path.resolve方法接收的第一个入参为undefined,不符合入参必须为字符串的要求,触发类型错误
修复方案

步骤1:构造ESM环境下的目录路径

通过import.meta.url搭配url模块的fileURLToPath方法,生成等价于CommonJS下的__dirname路径。

步骤2:修正代码错误逻辑

调整dotenv的path参数写法,同时修正变量声明的语法错误。

(可选)适配Windows环境变量设置

Windows原生的环境变量设置命令跨平台兼容性差,建议安装cross-env实现多平台统一的环境变量注入。

修复后完整代码
import dotenv from "dotenv";
import path from 'path';
import { fileURLToPath } from 'url';

// 生成ESM模式下的当前文件路径、当前目录路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

dotenv.config({
  // 兜底默认加载development.env,避免NODE_ENV未传入时报错
  path: path.resolve(__dirname, `${process.env.NODE_ENV || 'development'}.env`),
});

const config = {
  NODE_ENV: process.env.NODE_ENV || "development",
  HOST: process.env.HOST || "localhost",
  PORT: process.env.PORT || 3001,
};

export default config;
额外注意事项
  • Node.js 14.13.0及以上版本原生支持fileURLToPath与ESM模式,无需额外安装依赖
  • Windows环境下启动项目时,可安装cross-env后使用cross-env NODE_ENV=production node 入口文件.js的命令启动,避免环境变量读取异常

内容的提问来源于stack exchange,提问作者Umut Palabiyik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:36:05