将 PHP 应用快速打包为 PHAR
发布时间:2019-11-06 13:57:11
humbug/box 是一款快速的、零配置的 PHAR 打包工具。
还记得前些天的《SMProxy, 让你的数据库操作快三倍!》吗,该项目的 PHAR 便是使用 Box 打包完成的。
该项目是 box-project/box2 的 Fork 分支,原项目已经不再维护。新项目的作者呼吁我们支持该 Fork。
Box 的可配置项有很多,为了能够快速帮助大家了解用法,接下来我将使用 SMProxy 的 box.json 作为例子给大家做一个简单的介绍。
推荐一篇预备知识,可以帮你简单了解 PHAR 的部分用途:使用 phar 上线你的代码包。
首先,正如 Box 作者的描述:
Fast, zero config application bundler with PHARs.
我们默认无需任何配置,在你的 PHP 应用的根目录执行:
composer require humbug/box
vendor/bin/box compile
即可生成一个基本的 PHAR 包文件。
Box 的配置文件为应用根目录的 box.json
,例如 SMProxy 项目的该文件内容为:
{
"main": "bin/SMProxy",
"output": "SMProxy.phar",
"directories": [
"bin",
"src"
],
"finder": [
{
"notName": "/LICENSE|.*\\.md|.*\\.dist|composer\\.json|composer\\.lock/",
"exclude": [
"doc",
"docs",
"test",
"test_old",
"tests",
"Tests",
"vendor-bin"
],
"in": "vendor"
},
{
"name": "composer.json",
"in": "."
}
],
"compression": "NONE",
"compactors": [
"KevinGH\\Box\\Compactor\\Json",
"KevinGH\\Box\\Compactor\\Php"
],
"git": "phar-version"
}
main
用于设定应用的入口文件,也就是打包 PHAR 后,直接运行该 PHAR 包所执行的代码,你可以在某种意义上理解为index.php
。output
用于设定 PHAR 的输出文件,可以包含目录,相对路径或绝对路径。directories
用于指定打包的 PHP 源码目录。finder
配置相对比较复杂,底层是使用Symfony/Finder
实现,与 PHP-CS-Fixer 的 Finder 规则类似。在以上例子中,包含两个 Finder;第一个定义在vendor
文件夹内,排除指定名称的文件和目录;第二个表示包含应用根目录的composer.json
。compression
用于设定 PHAR 文件打包时使用的压缩算法。可选值有:GZ
(最常用) /BZ2
/NONE
(默认)。但有一点需要注意:使用GZ
要求运行 PHAR 的 PHP 环境已启用 Gzip 扩展,否则会造成报错。compactors
用于设定压缩器,但此处的压缩器不同于上文所介绍的compression
;一个压缩器类实例可压缩特定文件类型,降低文件大小,例如以下 Box 自带的压缩器:KevinGH\Box\Compactor\Json
:压缩 JSON 文件,去除空格和缩进等。KevinGH\Box\Compactor\Php
:压缩 PHP 文件,去除注释和 PHPDoc 等。KevinGH\Box\Compactor\PhpScoper
:使用 humbug/php-scoper 隔离代码。
git
用于设定一个「占位符」,打包时将会扫描文件内是否含有此处定义的占位符,若存在将会替换为使用 Git 最新 Tag 和 Commit 生成的版本号(例如2.0.0
或2.0.0@e558e33
)。你可以参考 这里 的代码来更加深入地理解该用法。
我目前常用的配置大概就是这些,强力推荐看看官方的 配置文档 来了解更多的配置项、示例和默认值,以及它们的用法;思路清晰、简明扼要。