symbiont / laravel-module-installer
Requires
- php: ^8.1
- composer-plugin-api: ^2.0
Requires (Dev)
- composer/composer: ^2.0
- laravel/framework: ^10.0 | ^11.0
- mockery/mockery: ^1.6
- nwidart/laravel-modules: ^10.0 | ^11.0
- phpunit/phpunit: ^11.1
README
This package replaces Josh Brown's joshbrw/laravel-module-installer and is an extended version aiming to be backwards compatible.
Requirements
- PHP
^8.1
- Laravel
10+
- Laravel Modules
10+
Install joshbrw/laravel-module-installer if support for Laravel / Laravel Modules < ^10.0
is needed.
Installation
Remove any trace of joshbrw/laravel-module-installer
if present, these two modules will clash.
composer remove joshbrw/laravel-module-installer
composer require symbiont/laravel-module-installer
Usage
Ensure you have the type
set to laravel-module
in your module's composer.json
The installation of a laravel-module
is by default backwards compatible with joshbrw/laravel-module-installer though
it is not required to end the module's package name with -module
.
The only prerequisite is that the type
of a Laravel module in the composer.json
should be set to laravel-module
. If
the type
is missing, this installer will not be able to act when required by composer.
{
"name": "vendor/package-name",
"type": "laravel-module",
"description": "Some vendor package-name",
"keywords": ["vendor", "package-name"],
"etc": "etc"
}
If the type
is set correctly, simply require the laravel module using composer composer require vendor/module-name
.
Options
Application composer.json
All options are placed in key module-installer
in the extra
part of the application's composer.json
{
"extra": {
"module-installer": {
/* options */
}
}
}
option | type | default | |
---|---|---|---|
install-directory | string | Modules | Sets the directory name where modules are installed, defaults to Modules |
use-symlinks | bool | false | Use symlinks instead of moving module directories from vendor to install-directory |
{
"extra": {
"module-installer": {
"install-directory": "Custom",
"use-symlinks": true
}
}
}
Option install-directory
To change the default Modules
directory where the modules are installed, set the install-directory
to any custom directory.
Option use-symlinks
If set to true
, any Laravel module installed will be symlinked to the (default) Modules
directory instead of being moved from the vendor
directory
to the (default) Modules
directory, e.g. ./Modules/SomePackage => ./vendor/some-name/some-package-module
.
Package composer.json
All options are placed in key module-installer
in the extra
part of the module package composer.json
option | type | default | |
---|---|---|---|
module-name | string | Sets a custom module name | |
include-module-vendor | bool | false | Includes the vendor name in the module directory path |
include-module-part | bool | false | Does not remove the ending -module and becomes part of the module directory path |
{
"extra": {
"module-installer": {
"module-name": "custom-module-name",
"include-module-vendor": true,
"include-module-part": true
}
}
}
Option module-name
By default, this package uses the <vendor>/<package-name>
structure as a base to determine the module's directory path. To
change this default behaviour, set the module-name
key to any custom name.
Using "module-name": "custom-module-name"
will result in a module directory path called Modules/CustomModuleName
Note
The value of
module-name
will be automatically converted fromkebab-case
(minus (-) separator only) toPascalCase
.
Important!
This also influences the autoload paths of the module. Make sure you set the correct paths.
Option include-module-vendor
To include the package vendor name in the module's directory path, set the include-module-vendor
to true
(defaults to false
).
Given vendor/some-module
will result in a module directory path called Modules/Vendor/Some
Note
The vendor name will be automatically converted from
kebab-case
(minus (-) separator only) toPascalCase
.
Option include-module-part
If a package name ends with -module
, this will be removed by default. If -module
should be part of the module directory path,
set include-module-part
to true
to incorporate it into its path.
Given vendor/some-module
results in a module directory path called Modules/SomeModule
Tests
composer test
Authors
- dbf
- Josh Brown