php-makephar/README.md

70 lines
2.0 KiB
Markdown

MakePhar mk2
============
This is a rewrite of my old MakePhar utility, with cleaner code and added
portability. Besides being able to pack executables, this version can also
create libraries, such as portable plugins.
## Executables
If your project is using composer, and your main stub is located in the
source directory as specified in the composer.json, you can create a
manifest easily:
$ makephar -n > makephar.sdl
Now, just update `makephar.sdl` to make sure the **stub** points to the
executable stub. Here is an example:
phar "my-project.phar" {
include {
dir "src";
dir "vendor";
}
stub "src/boot.php";
}
To build this into a .phar archive, just call `makephar`:
$ makephar
The output file `my-project.phar` should be created and be executable out of
the box.
## Libraries
Libraries work like executables, with the difference that they **require** a
composer project, or rather it requires a file named `vendor/autoload.php` in
the package.
To load your own bootstrap using composer, add them as file autoloaders:
...
"autoload": {
"psr-4": ...
"files": [ "src/my-library-stub.php" ]
}
Next, make sure you have a line in your `makephar.sdl` that reads:
library true;
You should now be able to create a library phar by invoking `makephar`.
It is recommended that you add a check in your main stub to make sure that
the plugin or library has what is needed, such as checking a define or making
sure that a method or class already exists.
## Pro Tips
* You can have multiple `phar` blocks in your `makephar.conf`. This lets
you build a main executable, libraries etc in one go. You currently can't
pick the rule to build tho, but rather all defined phars will be built.
* MakePhar will minify your files using `php_strip_whitespace()` before adding
them to the archive. This shouldn't be an issue, but if your code depends on
a specific character index in a specific php file, you might want to use
another tool for the time being.