定制 azteck/composer-workspaces 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

azteck/composer-workspaces

Composer 安装命令:

composer require azteck/composer-workspaces

包简介

Gestionnaire de workspaces Composer pour applications modulaires et monorepos PHP

README 文档

README

Plugin Composer pour gérer automatiquement les modules dans une architecture modulaire ou monorepo PHP.

Fonctionnalités

  • Découverte automatique des modules dans un ou plusieurs dossiers configurables
  • Injection automatique des namespaces PSR-4 (avec support des dossiers en minuscules)
  • Installation automatique des dépendances des modules (composer install)
  • Compatible Laravel Modules (nwidart/laravel-modules)
  • Compatible monorepo PHP

Installation

composer require azteck/composer-workspaces

Autoriser le plugin dans votre composer.json :

{
    "config": {
        "allow-plugins": {
            "azteck/composer-workspaces": true
        }
    }
}

Configuration

La configuration se fait dans la clé extra.workspaces.paths de votre composer.json racine.

Dossier unique

{
    "extra": {
        "workspaces": {
            "paths": ["Modules"]
        }
    }
}

Plusieurs dossiers

{
    "extra": {
        "workspaces": {
            "paths": ["Modules", "MyModules", "Tools", "Extra"]
        }
    }
}

Avec chemin absolu

{
    "extra": {
        "workspaces": {
            "paths": ["/opt/shared-modules", "Modules"]
        }
    }
}

Si aucun chemin n'est configuré, le plugin utilise Modules/ par défaut. Les chemins inexistants sont ignorés silencieusement.

Structure attendue

Chaque sous-dossier d'un chemin configuré est considéré comme un module s'il contient un composer.json.

project/
├── composer.json
├── Modules/
│   └── Blog/
│       ├── composer.json        ← détecté automatiquement
│       ├── Providers/
│       ├── Http/
│       ├── Models/
│       ├── database/
│       │   ├── seeders/
│       │   └── factories/
│       └── tests/
├── Tools/
│   └── MyTool/
│       └── composer.json        ← détecté automatiquement
└── Extra/                       ← ignoré si absent

Configuration PSR-4 d'un module

Pour les modules dont les dossiers sont en minuscules (ex. database/seeders/) mais dont les namespaces utilisent des majuscules (ex. Database\Seeders\), déclarez des entrées PSR-4 spécifiques dans le composer.json du module :

{
    "name": "modules/blog",
    "autoload": {
        "psr-4": {
            "Modules\\Blog\\":                      "",
            "Modules\\Blog\\Database\\Seeders\\":   "database/seeders/",
            "Modules\\Blog\\Database\\Factories\\": "database/factories/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Modules\\Blog\\Tests\\": "tests/"
        }
    }
}

La clé "" correspond à la racine du module. Ainsi Modules\Blog\Providers\BlogServiceProvider est résolu vers Modules/Blog/Providers/BlogServiceProvider.php.

Fonctionnement

Le plugin se raccroche aux hooks Composer suivants :

Hook Action
pre-autoload-dump Injecte les PSR-4 de tous les modules dans l'autoloader racine
post-install-cmd Lance composer install dans les modules qui ont des dépendances
post-update-cmd Lance composer install dans les modules mis à jour

Output attendu

[Workspaces] Injection des PSR-4...
  PSR-4     [Blog]  Modules\Blog\ → Modules/Blog
  PSR-4     [Blog]  Modules\Blog\Database\Seeders\ → Modules/Blog/database/seeders
  PSR-4 dev [Blog]  Modules\Blog\Tests\ → Modules/Blog/tests
  PSR-4     [MyTool]    Tools\MyTool\ → Tools/MyTool/src
Generated optimized autoload files ✅

Exemple composer.json complet

{
    "name": "vendor/my-project",
    "require": {
        "azteck/composer-workspaces": "*"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    },
    "config": {
        "allow-plugins": {
            "azteck/composer-workspaces": true
        }
    },
    "extra": {
        "workspaces": {
            "paths": ["Modules", "Tools"]
        }
    }
}

Licence

LICENCE MIT

统计信息

  • 总下载量: 16
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2026-05-16

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固