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
相关产品推荐
相关产品推荐

