You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用nWidart/laravel-modules将模块目录放在Laravel项目外并多项目共用

解决多Laravel项目共用nWidart模块时的服务提供者找不到问题

问题原因

你当前的modules.php配置存在两个核心问题:

  1. namespace留空导致框架无法正确解析模块类的命名空间规则
  2. paths.modules直接指向上级的PROJECTS目录,框架会扫描该目录下所有子目录(包括其他项目)当作模块,引发错误的类加载路径

解决步骤

1. 修正modules.php配置

打开项目根目录下的config/modules.php,调整配置如下:

return [
    'namespace' => 'Modules', // 保留默认命名空间,和模块的实际命名空间对应
    'paths' => [
        'modules' => [
            base_path('../Module1'), // 直接指向共用的Module1目录
            base_path('modules'), // 保留当前项目自身的模块目录(如果有)
        ],
        // 其他原有配置保持不变
    ],
];

这样框架只会加载指定的共用模块,不会误扫其他项目目录。

2. 配置Composer自动加载

在每个需要共用模块的项目的composer.json中,添加共用模块的PSR-4自动加载规则:

"autoload": {
    "psr-4": {
        "Modules\\Module1\\": "../../Module1/src/"
    }
}

执行命令更新自动加载缓存:

composer dump-autoload

3. 验证模块的命名空间与服务提供者

检查共用模块Module1/src/Providers/Module1ServiceProvider.php的命名空间是否正确:

namespace Modules\Module1\Providers;

use Illuminate\Support\ServiceProvider;

class Module1ServiceProvider extends ServiceProvider
{
    // 模块服务提供者的逻辑代码
}

同时确认模块根目录下的module.json中,providers字段指向正确的类:

{
    "name": "Module1",
    "providers": [
        "Modules\\Module1\\Providers\\Module1ServiceProvider"
    ]
}

4. 清除框架缓存

执行以下命令清除旧配置缓存,确保新配置生效:

php artisan cache:clear
php artisan config:clear

完成以上步骤后,再执行php artisan module:list就应该能正常加载共用模块了。

内容的提问来源于stack exchange,提问作者Empsis Sistemas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:05:20