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

export const name = 与 exports.name = 的区别及ESLint兼容问题

CommonJS与ESM导出写法的差异及ESLint兼容方案

一、两种写法的核心差异

这俩写法看着功能类似,但分属完全不同的模块规范:

  • export const name = [some function] 是ES模块(ESM)的标准命名导出,属于ECMAScript官方规范
  • exports.name = [some function] 是CommonJS(CJS)的导出方式,是Node.js早期的模块实现标准

虽然在Node.js的兼容模式下,二者都能实现导出name成员的效果,但底层逻辑天差地别:

  • ESM导出是静态的,代码解析阶段就确定导出内容,支持Tree Shaking这类编译时优化
  • CommonJS的exports是普通对象,导出是动态的,运行时可以随意修改、新增导出属性

二、解决ESLint的"No named exports found in module"报错

ESLint报这个错,是因为当前配置默认按ES模块规则校验代码,而exports.name是CommonJS语法,不在ESM导出规则的识别范围内。有两种解决思路:

1. 告诉ESLint当前用CommonJS规范

在你的ESLint配置文件(比如.eslintrc.js)里,把parserOptions.sourceType设为"commonjs":

module.exports = {
  // 其他配置项...
  parserOptions: {
    sourceType: "commonjs"
  }
};

这样ESLint就会按CommonJS的规则检查模块导出,不会再报错。

2. 统一改用ES模块语法

如果项目整体是基于ES模块的(比如用Vite、Webpack 5或者Node.js的ESM模式),建议直接换成ESM的命名导出写法:

export const name = [some function];

这种写法不仅符合ESLint的默认校验规则,还能更好地适配现代工具链的优化能力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:20