pixelfear / composer-dist-plugin
Downloads distributable assets to be used in packages so you don't have to commit them.
Fund package maintenance!
jasonvarga
Installs: 2 321 609
Dependents: 42
Suggesters: 0
Security: 0
Stars: 28
Watchers: 2
Forks: 2
Open Issues: 1
Type:composer-plugin
Requires
- composer-plugin-api: ^1.1 || ^2.0
Requires (Dev)
- composer/composer: ^1.10
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8.4
README
A Composer plugin that allows zip files containing distributable assets to be downloaded and extracted within a package's directory when it's installed.
Useful for packages that need to ship compiled css/js files but don't want to track them within git.
Note: This just downloads and extracts the zip.
It doesn't compile or create them. To do that, check the the Prerequisites section below.
Example
Suppose you publish a PHP package foo/bar
which expects your compiled dist assets to be located in resources/dist
. Place this configuration in the composer.json
for foo/bar
:
{ "name": "foo/bar", "require": { "pixelfear/composer-dist-plugin": "dev-master" }, "extra": { "download-dist": { "url": "https://github.com/foo/bar/releases/download/{$version}/dist.tar.gz", "path": "resources/dist" } } }
Prerequisites
This plugin only downloads and extracts an existing zip from a URL. You will need to create the zip yourself.
A good solution for this could be using a GitHub Actions workflow.
For example, this workflow will do the following steps whenever you push a tag starting with v
:
- Checkout your code using Git
- Run npm install
- Compile assets using Laravel Mix
- Create a tar.gz archive
- Create a GitHub release
- Upload the tar to the release
Of course, this means that archives will only exist for tagged releases. If you are installating a package using a branch like dev-master, the zip will 404. In this case you can manually compile your assets locally.
Configuration
Multiple bundles
In the example above, a single zip (bundle) is used. However, you may configure multiple bundles to be downloaded by providing an array of bundle objects.
"extra": { "download-dist": [ { "url": "...", "path": "dist/one", }, { "url": "...", "path": "dist/two" } ] }
Bundle options
For each bundle, the following options are available: