70 lines
2.0 KiB
Markdown
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.
|