升级ESLint v9至next-json,type:module是否影响CJS安全分发?
关于ESLint v9升级后保留package.json"type": "module"的安全性问题
可以安全保留这个设置,但前提是你要正确处理CJS分发文件的扩展名和包入口配置,具体如下:
核心原理:package.json里的
"type": "module"是告诉Node.js,项目中默认的.js文件按ESM模块处理,但.cjs文件会被强制识别为CJS模块,不受这个设置影响。关键操作:
- 确保你的CJS构建输出文件都使用
.cjs扩展名,ESM输出文件用.js(或.mjs)。 - 在package.json里明确配置双格式入口:
"main": "./dist/index.cjs", "module": "./dist/index.js", "exports": { ".": { "require": "./dist/index.cjs", "import": "./dist/index.js" } }exports字段是Node.js推荐的现代入口配置,能让Node.js根据用户的加载方式(require/import)自动匹配对应的模块格式,完全不受"type": "module"的干扰。
- 确保你的CJS构建输出文件都使用
额外验证:
开发环境因为ESLint v9是ESM,必须设置"type": "module"才能正常运行,但这和你的分发包无关。发布前一定要分别测试CJS和ESM的加载场景:比如用require('your-package')测试CJS,用import 'your-package'测试ESM,确保两种加载方式都不会报错。
内容的提问来源于stack exchange,提问作者Daniele Ricci
相关产品推荐
相关产品推荐

