已在package.json设置"type": "module",如何不修改.js扩展名让部分文件不被视为ES模块?
解决方案:在ES模块项目中保留.js扩展名同时指定特定文件为CommonJS
完全可以实现,无需修改目标文件的扩展名,通过配置package.json即可完成需求。
核心方法:利用package.json的exports字段
当项目根目录的package.json设置了"type": "module"(默认所有.js文件按ES模块处理),你可以通过exports字段为特定文件单独指定模块类型,让Node.js将其当作CommonJS处理。
具体配置示例(假设目标文件为filename.js):
{ "type": "module", "exports": { "./filename.js": { "type": "commonjs", "default": "./filename.js" } } }
原理说明
exports字段是Node.js控制模块解析的核心配置,优先级高于默认的扩展名和type规则。- 上述配置明确告诉Node.js:无论通过
require还是import加载./filename.js,都将其视为CommonJS模块处理,同时保留原有的.js扩展名,完全满足服务器脚本直接指向该文件的要求。
替代方案(适用于文件不在根目录的场景)
如果目标文件位于子目录中,你可以在该子目录下创建一个独立的package.json,仅包含以下内容:
{ "type": "commonjs" }
这样该子目录下所有.js文件都会被当作CommonJS处理,无需修改根目录的exports配置。
内容的提问来源于stack exchange,提问作者lukaszkups
相关产品推荐
相关产品推荐

