fredemmott / hhvm-autoload
v1.3.0
2017-02-17 05:54 UTC
Requires
- composer-plugin-api: ^1.0
- hhvm: ^3.12
- 91carriage/phpunit-hhi: ^5.1
- facebook/definition-finder: ^1.0
- fredemmott/hack-error-suppressor: ^1.0
- fredemmott/type-assert: ^1.1
Requires (Dev)
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2020-11-09 23:43:36 UTC
README
HHVM 上自动加载类、枚举、函数、typedef 和常量的 Composer 插件。
常见问题解答
我需要使用 Hack 吗?
不需要,PHP 就可以 - 但是需要 HHVM,因为
- PHP 不支持自动加载类以外的任何内容
- 此项目和解析器是用 Hack 编写的
如果我没有编写 Hack,我能自动加载函数和常量吗?
是的 :)
为什么此项目使用 Composer 的自动加载器?
它不能依赖于自己 :)
预览警告
自动加载机制在 Facebook 上经过了大量测试,但是用于查找自动加载项(类、函数等)的库相对较新,并且尚未在众多项目中使用。它已在以下环境中进行了测试:
- HHVM 和 Hack 中的 PHP 和 Hack 代码
- Hack/HHVM 文档网站
- Hack/HHVM 文档网站的依赖项
如果您遇到解析错误,请将示例代码或无法解析的开源项目的链接提交给 hhvm/definition-finder 的问题。
对于任何其他问题,请将问题提交给 此项目 的问题。
用法
- 添加一个
hh_autoload.json
文件(见下文),可选地从 composer.json 中删除您的配置 composer require facebook/hhvm-autoload
- 将任何对
vendor/autoload.php
的引用替换为vendor/hh_autoload.php
- 如果您正在使用 PHPUnit,您需要将
vendor/hh_autoload.php
添加到您的bootstrap.php
或phpunit.xml
中的bootstrap
文件(如果您还没有的话)。这是因为 PHPUnit 会自动加载vendor/autoload.php
,但不知道vendor/hh_autoload.php
- 要重新生成映射,请运行
composer dump-autoload
或其他生成映射的命令
配置(hh_autoload.json
)
一个最小的配置文件如下
{ "roots": [ "src/" ] }
此工具将在src/
目录中查找可自动加载的定义,并在vendor/
目录中查找。它会关注vendor/
目录内composer.json
文件中的autoload
部分。
以下设置是可选的
"extraFiles": ["file1.php"]
- 应该不被自动加载,但应该由vendor/hh_autoload.php
通过require()
调用的文件。这应该比在Composer中使用时需要得少。"includeVendor": false
- 不要将vendor/
目录中的定义包含在vendor/hh_autoload.php
中。"autoloadFilesBehavior": "scan"|"exec"
- 是否对来自vendor
的files
进行scan
查找定义,或者由vendor/hh_autoload.php
执行exec
- 默认为scan
,通常是首选的,但如果您有需要在启动时执行代码的依赖项,则需要使用exec
。如果您的依赖项仅使用files
,并且需要定义不是类的东西,这通常是这种情况,则scan
就足够了。
工作原理
facebook/definition-finder
提供了指定位置中所有PHP和Hack定义的列表- 这被用来生成类似于类映射的东西,但包括其他类型的定义
- 该映射通过
HH\autoload_set_paths()
提供给HHVM
Composer插件API允许它在Composer自己重新生成vendor/autoload.php
文件时自动重新生成vendor/hh_autoload.php
文件。
贡献
我们欢迎GitHub问题和拉取请求 - 请参阅CONTRIBUTING.md以获取详细信息。