jakoch / phantomjs-installer
一个Composer包,可以将PhantomJS二进制文件(Linux、Windows、Mac)安装到项目的`/bin`目录。
Requires
- php: >5.3
- ext-bz2: *
- ext-openssl: *
Requires (Dev)
- composer/composer: ^1.2
- phpunit/phpunit: ^8
README
一个Composer包,可以将PhantomJS二进制文件(Linux、Windows、Mac)安装到项目的/bin
目录。
目录
安装
要将PhantomJS作为本地、项目级的依赖安装到项目中,只需在项目的`composer.json`文件中添加对jakoch/phantomjs-installer
的依赖即可。
{ "require": { "jakoch/phantomjs-installer": "^3" }, "config": { "bin-dir": "bin" }, "scripts": { "post-install-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ], "post-update-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ] } }
对于开发依赖,将require
更改为require-dev
。
默认下载源是:https://bitbucket.org/ariya/phantomjs/downloads/ 你可以通过设置自定义CDN URL来更改它,这已在"从镜像下载"部分中解释。
通过设置Composer配置指令bin-dir
,供应商二进制文件将被安装到指定的文件夹中。重要!Composer默认将二进制文件安装到`vendor\bin`。
`scripts`部分是必要的,因为目前Composer不会将事件传递给依赖的处理脚本。如果你省略它,你可能需要手动执行安装程序。
现在,假设已设置如要求的`scripts`部分,PhantomJS二进制文件将被安装到`/bin`文件夹,并随着项目的Composer依赖项一起更新。
如何要求特定的PhantomJS版本?
环境变量和服务器变量`PHANTOMJS_VERSION`允许你在打包时指定版本要求。
你还可以在`composer.json`的`extra`部分设置phantomjs-version
"extra": { "jakoch/phantomjs-installer": { "phantomjs-version": "2.1.1" } }
版本的搜索顺序是1) $_ENV,2) $_SERVER,3) `composer.json` (extra部分),4) 回退到v2.1.1(硬编码的最后一个版本)。
这是如何内部工作的?
- 获取PhantomJS安装程序
在你的composer.json中,你需要要求"phantomjs-installer"这个包。该包由composer获取并存储到`./vendor/jakoch/phantomjs-installer`。它只包含一个文件,即PhantomInstaller\\Installer
。
- 平台特定的PhantomJS下载
PhantomInstaller\\Installer
作为"post-install-cmd"运行。这就是为什么你在"composer.json"中需要"scripts"部分的原因。安装程序创建一个新的内存中的composer包"phantomjs",检测你的操作系统,并将正确的Phantom版本下载到`./vendor/jakoch/phantomjs`文件夹。所有PhantomJS文件都存储在那里,特别是`examples`。
- 安装到`/bin`文件夹
然后将二进制文件从`./vendor/jakoch/phantomjs`复制到由Composer配置的`bin-dir`文件夹。
- 生成PhantomBinary
安装程序生成一个PHP文件PhantomInstaller\\PhantomBinary
,并插入二进制的路径。
PhantomBinary
为了方便访问二进制文件及其文件夹,在安装过程中自动创建了一个名为`PhantomBinary`的类。
该类定义了常量`BIN`和`DIR`
- `BIN`是PhantomJS二进制文件的完整路径,例如`/your_project/bin/phantomjs`
DIR
是二进制文件的文件夹,例如/your_project/bin
这两个常量也可以通过它们的获取方法 getBin()
和 getDir()
访问。
使用方法
use PhantomInstaller\PhantomBinary;
// get values with class constants
$bin = PhantomInstaller\PhantomBinary::BIN;
$dir = PhantomInstaller\PhantomBinary::DIR;
// get values with static functions
$bin = PhantomInstaller\PhantomBinary::getBin();
$dir = PhantomInstaller\PhantomBinary::getDir();
此功能与 Node.js 的 phantomjs 模块 的 location.js
类似。
覆盖平台要求
环境变量和服务器变量 PHANTOMJS_PLATFORM
和 PHANTOMJS_BITSIZE
允许您在打包时覆盖平台要求。这使打包系统与目标系统解耦。允许在 Linux 上为 MacOSX 打包或在 Windows 上为 Linux 打包。
可能的值
PHANTOMJS_PLATFORM
的值有:macosx
、windows
、linux
。PHANTOMJS_BITSIZE
的值有:32
或64
。
从镜像下载
您可以通过以下位置之一来覆盖默认的 PhantomJS 二进制文件下载位置。按优先级顺序列出(优先级最高)
- 环境变量
PHANTOMJS_CDNURL
- 服务器变量
PHANTOMJS_CDNURL
- 在您的
composer.json
中使用$['extra']['jakoch/phantomjs-installer']['cdnurl']
"extra": { "jakoch/phantomjs-installer": { "cdnurl": "https://github.com/Medium/phantomjs/releases/download/v1.9.19/" } },
默认下载位置
默认下载位置是 Bitbucket: https://api.bitbucket.org/2.0/repositories/ariya/phantomjs/downloads/
。您不需要明确设置它。当 PHANTOMJS_CDNURL
未设置时,将使用它。
镜像
您可以将以下镜像 URL 之一用作 PHANTOMJS_CDNURL
的值
https://cnpmjs.org/downloads/
- 美国,圣马特奥(47.88.189.193)https://npm.taobao.org/mirrors/phantomjs/
- 中国,杭州(114.55.80.225)https://github.com/Medium/phantomjs/
- 美国,旧金山(192.30.253.113)
此镜像列表并不完整。如果您知道其他镜像,请毫不犹豫地将其添加到此列表中。
镜像 URL 也不是硬编码的,除了 Github URL。这使您能够指向任何您喜欢的 PhantomJS 镜像或下载文件夹。例如,您可以将指向下载文件夹的 URL 指向您公司存储二进制的下载文件夹: PHANTOMJS_CDNURL=https://cdn.company.com/downloads/phantomjs/
。
404时自动尝试降级版本下载
如果在下载存档时由于 HttpStatusCode 404(资源未找到)失败,下载器将自动将版本降低到下一个可用的版本并重试。重试次数由 getPhantomJSVersions()
中硬编码的 PhantomJS 版本数决定。此功能是为了解决 v2.0.0 在所有平台上不可用的问题(参见问题 #25)。