从CommonJS转ES模块后import映射报错Directory import not supported
问题原因与解决方法
你的错误源于import mappings的路径配置格式错误,原生ES模块的import mappings是严格的字符串替换逻辑,和module-alias的自动补全行为存在差异:
问题分析
你当前的package.json配置中,#http/*映射到./http/,当执行import APIClient from '#http/apiClient';时,会被替换为./http/apiClient/——这是一个目录路径,而Node.js ES模块默认不支持直接导入目录(除非目录包含index.js或配置了package.json的exports字段)。而module-alias会自动尝试查找目录下的入口文件(比如index.js),所以之前能正常工作。
解决方案
1. 修正imports路径配置
将映射路径的结尾斜杠改为*,让替换后的路径指向具体文件而非目录:
{ "imports": { "#http/*": "./http/*", "#cloud/*": "./cloud/*", "#constants": "./constants" } }
这样#http/apiClient会被替换为./http/apiClient,Node.js会自动尝试查找对应的文件(比如apiClient.js、apiClient.mjs等),和你之前用module-alias的行为一致。
2. 确保项目已启用ES模块
确认你的package.json中已经添加了"type": "module"字段,否则Node.js会默认按CommonJS解析,也会导致import mappings失效:
{ "type": "module", "imports": { // ... 你的映射配置 } }
内容的提问来源于stack exchange,提问作者ololo
相关产品推荐
相关产品推荐

