AdonisJs Ace命令引入Event系统报E_IOC_LOOKUP_FAILED错误如何解决
问题解决步骤
第一步:为Ace命令开启应用容器加载
Ace命令默认不会初始化完整的IoC容器,你需要在命令的类装饰器中添加loadApp: true配置,才会注册所有核心服务到容器中,示例配置如下:
import { BaseCommand } from '@adonisjs/core/ace' import { Command } from '@adonisjs/core/build/standalone' @Command({ command: 'your:custom-command', description: '自定义命令描述', loadApp: true // 必须添加该配置 }) export default class YourCustomCommand extends BaseCommand { public async run() { // 后续服务导入逻辑写在这里 } }
第二步:根据你的AdonisJS版本调整导入写法
- 若使用AdonisJS v5版本,保持原有导入逻辑即可,开启
loadApp后即可正常解析:
public async run() { const { default: Event } = await import('@ioc:Adonis/Core/Event') }
- 若使用AdonisJS v6版本,官方已废弃
@ioc:前缀的命名空间导入方式,直接导入对应服务即可:
public async run() { const { default: Event } = await import('@adonisjs/core/services/event') }
额外排查点
如果完成上述两步后仍报错,检查项目根目录下的.adonisrc.json(v5)或adonisrc.ts(v6)配置文件,确认Event服务提供者已被注册,该服务默认会内置在官方核心包中,若你手动删除过配置,补充回去即可。
内容的提问来源于stack exchange,提问作者Ricky Barnett
相关产品推荐
相关产品推荐

