Say you’ve created a custom operation, and want to share it with other developers around the world. How do you do that? Well, it’s pret...
Say you’ve created a custom operation, and want to share it with other developers around the world. How do you do that? Well, it’s pretty easy, actually. We have a full tutorial that you can follow, but for this particular use case – only an operation, it’s even easier.
Assuming you’ve already got your operation ready (e.g. the Email operation we’ve taught in a previous article), you only need to do the following steps:
We'll use Laravel Packager to generate the boilerplate for our new package. Let's install it using the following command:
composer require jeroen-g/laravel-packager --dev
Now let's create our package. Instead of using their skeleton, we're going to use the Backpack addon-skeleton:
php artisan packager:new --i --skeleton="https://github.com/Laravel-Backpack/addon-skeleton/archive/master.zip"
It will then ask you for some basic information about the package.
vendor-name
: your GitHub handle (or organisation), in kebab-case (ex: company-name);
package-name
: package-name should be in kebab-case too (ex: custom-operation);
skeleton
: the above command already has it, the URL; just hit ENTER;
website
: website URL including the protocol, http://example.com
;
description
: a short description of your package;
license
: MIT, GPLv2; our skeleton assumes you want MIT, but you can easily change it;The above command will:
/packages/vendor-name/package-name
folder in your root directory;path
in our project's composer.json
, under repositories
, to actually load the files;You'll notice the new folder looks identical to a Laravel project, with a few understandable exceptions.
Note: You can now test that your package is being loaded using dd('got here')
inside your package's AddonServiceProvider::boot()
method.
If your package needs any third-party packages apart from Backpack and Laravel, make sure to add them to the require section. Normally this just means cutting & pasting the line from your project's composer.json
to your package's composer.json
.
In our case, we don't have any.
Move operation files from the project directory to the same directory inside your package's src
directory; in our example, we move:
email.blade.php
to packages/{vendor-name}/{package-name}/resources/views/buttons
;email_form.blade.php
to packages/{vendor-name}/{package-name}/resources/views/operations
;EmailOperation.php
to packages/{vendor-name}/{package-name}/src/Http/Controllers/Operations
;Now, open all the files you've moved and manually update:
App\Http
with your {VendorName}\{PackageName}\Http
;crud::
with {vendor-name}.{package-name}::
Test that the package works & delete the empty package folders. That's it, your package is ready to be published.
README.md
file. Spend a little time on the description, screenshot, installation instructions etc. It's a HUGE factor in how popular your package can become.Note: Use the same name you defined in your package's composer.json
.
Run the following command inside the project's root directory to remove the locally created package.
php artisan packager:remove vendor-name package-name
And now install it exactly the same as your users will. You can use Composer's --prefer-source
flag so that it pulls the actual GitHub repo:
composer require vendor-name/package-name --prefer-source
Congratulations! You now have your brand-new Composer package, up and running. Now let everybody in the community know about it, by telling us in our Gitter, on Reddit's r/Laravel, and on our GitHub.
Subscribe to our "Article Digest". We'll send you a list of the new articles, every week, month or quarter - your choice.
What do you think about this?
Wondering what our community has been up to?