This package provides you with a simple tool to set up a new package and it will let you focus on the development of the package instead of the boilerplate. If you like a visual explanation check out this video by Jeffrey Way on Laracasts.
Via Composer
$ composer require jeroen-g/laravel-packager --dev
If you do not run Laravel 5.5 (or higher), then add the service provider in config/app.php
:
JeroenG\Packager\PackagerServiceProvider::class,
If you do run the package on Laravel 5.5+, package auto-discovery takes care of the magic of adding the service provider.
Be aware that the auto-discovery also means that this package is loaded in your production environment. Therefore you may disable auto-discovery and instead put in your AppServiceProvider
something like this:
if ($this->app->environment('local')) {
$this->app->register('JeroenG\Packager\PackagerServiceProvider');
}
Optional you can publish the configuration to provide a different service provider stub. The default is here.
$ php artisan vendor:publish --provider="JeroenG\Packager\PackagerServiceProvider"
Command:
$ php artisan packager:new MyVendor MyPackage
Result: The command will handle practically everything for you. It will create a packages directory, creates the vendor and package directory in it, pulls in a skeleton package, sets up composer.json and creates a service provider.
Options:
$ php artisan packager:new MyVendor MyPackage --i
$ php artisan packager:new --i
The package will be created interactively, allowing to configure everything in the package's composer.json
, such as the license and package description.
$ php artisan packager:new MyVendor/MyPackage
Alternatively you may also define your vendor and name with a forward slash instead of a space.
Remarks: The new package will be based on this custom skeleton. If you want to use a different package skeleton, you can either:
- (A) publish the configuration file and change the default skeleton that will be used by all
packager:new
calls. - (B) use the flag
--skeleton="http://github.com/path/to/archive/master.zip"
with your own skeleton to use the given skeleton for this one run instead of the one in the configuration.
Command:
$ php artisan packager:get author/repository
$ php artisan packager:git author/repository
$ php artisan packager:get https://github.com/author/repository
$ php artisan packager:git https://github.com/author/repository
If you specify only the package name to get, packager:get
and packager:git
will ask packagist API to get the repository URL.
If you specify the full URL instead of the package name, it will be directly used as the repository URL.
This can be useful to get repository content from your personal hosting. To work with packager:get
, you have to declare
the url template associated with your personal hosting domain in the configuration file to allow zip file download,
packager:git
is not impacted.
Result:
This will register the package in the app's composer.json
file.
If the packager:git
command is used, the entire Git repository is cloned. If packager:get
is used, the package will be downloaded, without a repository.
Options:
$ php artisan packager:git author/repository --branch=develop
$ php artisan packager:get https://github.com/author/repository MyVendor MyPackage
$ php artisan packager:git https://github.com/author/repository MyVendor MyPackage
It is possible to specify a branch with the --branch
option.
If you specify a vendor and name directly after the url, those will be used instead of the pieces of the url.
Command:
$ php artisan packager:tests
Result:
Packager will go through all maintaining packages (in packages/
) and publish their tests to tests/packages
.
Add the following to phpunit.xml (under the other testsuites) in order to run the tests from the packages:
<testsuite name="Packages">
<directory suffix="Test.php">./tests/packages</directory>
</testsuite>
Options:
$ php artisan packager:tests MyVendor MyPackage
Remarks: If a tests folder exists, the files will be copied to a dedicated folder in the Laravel App tests folder. This allows you to use all of Laravel's own testing functions without any hassle.
Command:
$ php artisan packager:list
Result:
An overview of all packages in the /packages
directory.
Options:
$ php artisan packager:list --git
The packages are displayed with information on the git status (branch, commit difference with origin) if it is a git repository.
Command:
$ php artisan packager:remove MyVendor MyPackage
Result:
The MyVendor\MyPackage
package is deleted, including its references in composer.json
and config/app.php
.
Command:
$ php artisan packager:publish MyVendor MyPackage https://github.com/myvendor/mypackage
Result:
The MyVendor\MyPackage
package will be published to Github using the provided url.
Command:
$ php artisan packager:check MyVendor MyPackage
Result:
The MyVendor\MyPackage
package will be checked for security vulnerabilities using SensioLabs security checker.
Remarks You first need to run
$ composer require sensiolabs/security-checker
It turns out that, especially on Windows, there might arise some problems with the downloading of the skeleton, due to a file regarding SSL certificates missing on the OS. This can be solved by opening up your .env file and putting this in it:
CURL_VERIFY=false
Of course this means it will be less secure, but then again you are not supposed to run this package anywhere near a production environment.
If you are having problems with timeouts when creating new packages, you can now change the config variable timeout in config/packager.php to fix this.
Please see changelog.md for what has changed recently.
Please see contributing.md for details and a todolist.
The EU Public License. Please see license.md for more information.