Node.js中不添加.js扩展名无法导入模块该如何解决?
报错原因
你遇到的ERR_MODULE_NOT_FOUND报错是因为你开启了Node.js的ES模块规范(即项目package.json中配置了"type": "module"),ESM标准要求相对路径导入自定义模块时必须补全文件扩展名,不支持CommonJS规范下的自动补全.js后缀的逻辑。
解决方案
方案1:补全导入语句扩展名(推荐)
直接修改对应的导入语句,补全.js后缀即可,符合ESM官方标准,无兼容风险:
将原来的代码:
import userController from '../controllers/user.controller';
修改为:
import userController from '../controllers/user.controller.js';
项目内所有相对路径导入的自定义.js/.json/.node文件,都需要按这个规则补全对应扩展名。
方案2:开启实验性自动解析后缀
如果不想批量修改现有导入语句,可以通过Node启动参数开启扩展名自动补全能力:
- 启动Node服务时追加
--experimental-specifier-resolution=node参数,如果你用nodemon启动,可将package.json中的scripts配置调整为:"scripts": { "start": "nodemon --experimental-specifier-resolution=node src/index.js" }
注意:该参数属于Node.js实验性特性,生产环境使用前需要确认对应Node版本的兼容性,长期来看更推荐使用方案1适配标准规范。
内容的提问来源于stack exchange,提问作者Cradoe
相关产品推荐
相关产品推荐

