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

ESM模块导入报错:请求的模块未提供envVars导出项

解决ESM模块导入系统常量的报错问题

报错信息

PS C:\xx\xx\projects\nodejs\http\processTIFF-0> node index.js
file:///C:/xx/xx/projects/nodejs/http/processTIFF-0/index.js:3
import {envVars} from './SYS/EnvVars.js'
        ^^^^^^^
SyntaxError: The requested module './SYS/EnvVars.js' does not provide an export named 'envVars'
    at ModuleJob._instantiate (internal/modules/esm/module_job.js:104:21)
    at async ModuleJob.run (internal/modules/esm/module_job.js:149:5)
    at async Loader.import (internal/modules/esm/loader.js:166:24)
    at async Object.loadESM (internal/process/esm_loader.js:68:5)
PS C:\Users\Amr.Bakri\projects\nodejs\http\processTIFF-0>

原始代码

EnvVars.js

export function define(name, value) {
    Object.defineProperty(exports, name, {
        value:      value,
        enumerable: true,
        writable: false
    });
}

define("END_POINT_HOST_JK","sf.tzt")
define("END_POINT_PATH_RASTER_IN_POLYGON","/xx/api/process/polygon-3857?polygon=")
define("END_POINT_PATH_RESOLUTION","&resolution=1")
define("WKT_EPSG4326","POLYGON((14.302759232915124 52.037914242476376,14.301196347357946 12.03581482424235,44.306554812125416 32.03367606317161,24.308149593306208 52.03695283888638,14.302759232915124 52.037914242476376))")

index.js

import {envVars} from './SYS/EnvVars.js'

问题原因

代码混用了CommonJS的exports和ESM语法,且index.js试图导入的envVars在EnvVars.js中从未定义导出。ESM模块的exports与CommonJS的不是同一对象,用Object.defineProperty(exports, ...)无法在ESM中生成可导出的变量。

修复方案

方案一:直接导出常量对象(推荐,符合ESM规范)

修改EnvVars.js,直接定义包含所有常量的对象并导出:

export const envVars = {
    END_POINT_HOST_JK: "sf.tzt",
    END_POINT_PATH_RASTER_IN_POLYGON: "/xx/api/process/polygon-3857?polygon=",
    END_POINT_PATH_RESOLUTION: "&resolution=1",
    WKT_EPSG4326: "POLYGON((14.302759232915124 52.037914242476376,14.301196347357946 12.03581482424235,44.306554812125416 32.03367606317161,24.308149593306208 52.03695283888638,14.302759232915124 52.037914242476376))"
};

// 如需常量不可修改,可冻结对象
Object.freeze(envVars);

index.js无需修改,直接使用即可:

import {envVars} from './SYS/EnvVars.js';

// 示例调用
console.log(envVars.END_POINT_HOST_JK);

方案二:保留define函数,导出统一对象

若要保留define函数逻辑,需在ESM中创建专属对象存储常量:

const envVars = {};

export function define(name, value) {
    Object.defineProperty(envVars, name, {
        value: value,
        enumerable: true,
        writable: false
    });
}

define("END_POINT_HOST_JK","sf.tzt")
define("END_POINT_PATH_RASTER_IN_POLYGON","/xx/api/process/polygon-3857?polygon=")
define("END_POINT_PATH_RESOLUTION","&resolution=1")
define("WKT_EPSG4326","POLYGON((14.302759232915124 52.037914242476376,14.301196347357946 12.03581482424235,44.306554812125416 32.03367606317161,24.308149593306208 52.03695283888638,14.302759232915124 52.037914242476376))");

export { envVars };

index.js导入代码保持不变即可正常使用。

方案三:命名导出单个常量

若不需要统一对象,可直接为每个常量做命名导出:

export const END_POINT_HOST_JK = "sf.tzt";
export const END_POINT_PATH_RASTER_IN_POLYGON = "/xx/api/process/polygon-3857?polygon=";
export const END_POINT_PATH_RESOLUTION = "&resolution=1";
export const WKT_EPSG4326 = "POLYGON((14.302759232915124 52.037914242476376,14.301196347357946 12.03581482424235,44.306554812125416 32.03367606317161,24.308149593306208 52.03695283888638,14.302759232915124 52.037914242476376))";

此时index.js可按需导入:

// 按需导入指定常量
import { END_POINT_HOST_JK, WKT_EPSG4326 } from './SYS/EnvVars.js';
// 或全部导入为一个对象
import * as envVars from './SYS/EnvVars.js';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:38:12