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

JavaScript ES模块中实现CJS式函数重导出及解决同名报错

ESM中实现函数导入后立即重导出的正确方式

因技术原因需导入函数后立即重导出,但官方文档仅提供了CommonJS(CJS)的实现方式,现需在ES Modules(ESM)中实现相同逻辑。

当前尝试的ESM代码出现报错:

import { foo } from './foo';
import { bar } from './bar';

export const foo = foo;
export const bar = bar;

错误信息:Parsing error: Identifier 'foo' has already been declared

参考可正常运行的CJS代码:

const foo = require('./foo');
const bar = require('./bar');
exports.foo = foo.foo;
exports.bar = bar.bar;

解决方案

方案1:直接重导出(最简洁推荐)

ESM原生支持直接重导出指定成员,无需额外声明变量,从根源避免重名问题:

export { foo } from './foo';
export { bar } from './bar';

方案2:导入整个模块后导出成员

如果后续需要对模块内容做额外处理,可先导入整个模块并赋予别名,再导出目标成员:

import * as fooModule from './foo';
import * as barModule from './bar';

export const foo = fooModule.foo;
export const bar = barModule.bar;

报错原因

你之前的代码报错是因为:通过import { foo }导入的foo已经是当前作用域的标识符,后续又用export const foo = foo;重复声明了同名变量,JavaScript不允许同一作用域内重复声明标识符,因此触发语法错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:04