Awilix loadModules加载正常但未注册问题求助
Awilix loadModules无法注册模块,resolve提示找不到依赖的解决方案
问题现象
调用listModules能正常匹配到目标模块,但使用loadModules无法完成注册,执行resolve('loginController')时抛出AwilixResolutionError: Could not resolve 'loginController',手动调用register注册单个模块则正常工作。
解决方案
修改loadModules的配置,添加resolve函数提取ES模块的默认导出:
container.loadModules(modulesToLoad, { formatName: 'camelCase', resolverOptions: { register: asFunction, resolve: module => module.default // 新增:获取ES模块默认导出 }, esModules: true // 加载ES模块 });
原因分析
ES模块的默认导出会被封装在模块对象的default属性中,而Awilix的loadModules默认不会自动提取该属性。手动注册时直接导入了default导出的控制器,因此能正常识别;但loadModules加载模块时拿到的是完整模块对象,未提取实际需要的导出内容,导致注册的模块不符合预期,最终resolve失败。
额外排查点(已验证可跳过)
- 确认glob路径
controllers/**/*.js能正确匹配目标文件(通过listModules输出已验证) - 确认
formatName: 'camelCase'将文件名转换为正确的注册名称(如LoginController.js转为loginController) - 确认
resolverOptions.register与模块类型匹配(函数用asFunction,类用asClass)
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

