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
)。你可以參考 這裡 的程式碼來更加深入地理解該用法。
我目前常用的配置大概就是這些,強力推薦看看官方的 配置文件 來了解更多的配置項、示例和預設值,以及它們的用法;思路清晰、簡明扼要。
最後,推薦關注 SMProxy,英文文件和上文介紹的 PHAR 打包部分,基本都是由我完成,有任何疑問歡迎透過 Issue 聯絡。
本作品採用《CC 協議》,轉載必須註明作者和本文連結