Composer php 让自动加载为存储库包工作
我尝试了classmap、psr-0、psr-4的所有功能,但在使用git存储库中的包时,似乎无法自动加载Composer php 让自动加载为存储库包工作,composer-php,Composer Php,我尝试了classmap、psr-0、psr-4的所有功能,但在使用git存储库中的包时,似乎无法自动加载 { "repositories": [ { "type": "package", "package": { "name": "michaeljs1990/bitcoin-php-api", "version": "dev-master", "source": { "url": "http
{
"repositories": [
{
"type": "package",
"package": {
"name": "michaeljs1990/bitcoin-php-api",
"version": "dev-master",
"source": {
"url": "https://github.com/michaeljs1990/Bitcoin-PHP-API",
"type": "git",
"reference": "master"
},
"autoload": {
"psr-0": {"Bitcoin": "src/Bitcoin"}
}
}
}
],
"require": {
"michaeljs1990/bitcoin-php-api": "dev-master"
}
}
该类是在src/Bitcoin目录中使用名称空间Bitcoin定义的,但总是失败
<?php
include 'vendor/autoload.php';
$test = new \Bitcoin\Bitcoin($null);
?>
您所指的存储库已经有一个
composer.json
文件,因此您在存储库中的条目不需要使用type:package
,只需使用以下内容即可:
{
"type": "vcs",
"url": "https://github.com/michaeljs1990/Bitcoin-PHP-API"
}
这将直接使用该存储库中的Composer数据,并且会起作用,因为您声明自动加载错误:
"autoload": {
"psr-0": {"Bitcoin": "src/Bitcoin"}
},
原文:
"autoload": {
"psr-0": { "": "src/" }
},
为了获得最佳性能,应使用以下方法:
"autoload": {
"psr-0": { "Bitcoin": "src/" }
},
有什么区别?PSR-0需要它应该尝试搜索的前缀,以及从中开始搜索转换为路径名的完整类名的目录。名为Bitcoin\Bitcoin
的类将出现在相对路径Bitcoin/Bitcoin.php
中
您的自动加载告诉Composer可以在src/Bitcoin
中找到带有Bitcoin
的类,这对于此类是错误的:src/Bitcoin/
+Bitcoin/Bitcoin.php
不存在
最初的自动加载告诉Composer,任何类都可以在src/
中找到,这对于大多数人来说也是错误的,但对于比特币类来说却是正确的。即使这样做有效,它也会在不同目录中搜索之前尝试在该目录中搜索大量其他类,从而浪费磁盘I/O
我的建议优化将此目录限制为以比特币开始的类,这是可行的,但我必须创建一个新目录,然后运行composer安装。仅更改composer.json中的自动加载后运行composer update似乎不起作用。是否有“重新安装所有内容”命令?Composer倾向于坚持使用已安装的内容。要完全重新启动,请删除vendor
文件夹和composer.lock
文件,然后运行composer update
或composer install
(如果锁文件不存在,则与更新相同)。