Php 依赖项中的脚本需要到Composer autoloader的路径
我正在开发一个包-Php 依赖项中的脚本需要到Composer autoloader的路径,php,autoload,composer-php,Php,Autoload,Composer Php,我正在开发一个包-myvendor/mylib,我计划使用Composer分发它,可能是通过Packagist。除其他外,这个包还包含一个命令行PHP脚本bin/console.PHP,我想将它提供给导入mylib包的项目,比如myvendor/mymain 我知道我可以在mylib包中指定composer.json中的config设置,其中包含要导入的容器数组: { "name": "myvendor/mylib", "config" : { "bin" : [
myvendor/mylib
,我计划使用Composer分发它,可能是通过Packagist。除其他外,这个包还包含一个命令行PHP脚本bin/console.PHP
,我想将它提供给导入mylib
包的项目,比如myvendor/mymain
我知道我可以在mylib
包中指定composer.json
中的config
设置,其中包含要导入的容器数组:
{
"name": "myvendor/mylib",
"config" : {
"bin" : ["bin/console.php"]
}
}
当mymain
项目安装/更新composer时,这个mylib/bin/console.php
被符号链接为mymain/bin/console.php
此外,我知道mymain
项目可以在他自己的composer.json
中指定他希望将依赖项bin符号链接到的位置:
{
"name": "myvendor/mymain",
"config": {
"bin-dir": "scripts"
}
}
在本例中,控制台脚本随后被符号链接为scripts/console.php
这很好用——顺便说一句,当所有人都出去时,这很酷
但是,脚本bin/console.php
本身需要包含生成的编写器vendor/autoloader.php
。在单独开发mylib
时,脚本bin/console.php
知道自己相对于vendor/autoloader.php
的位置,因此可以轻松地包含它。但是,一旦它作为依赖项导入到另一个项目中-myvendor/mymain
,在本例中,那么只有mymain/vendor/autoloader.php
脚本。原则上,控制台脚本无法知道相对于自动加载脚本,它驻留在何处
Composer是否提供了一些环境变量(控制台脚本可以访问),允许脚本找到正确的vendor/autoloader.php
脚本
顺便说一句:我知道,所以我想我可以要求导入项目-mymain
-定义(并导出!)varCOMPOSER\u VENDOR\u DIR
。然后我的控制台脚本可以使用它来查找项目的自动加载程序。但这似乎有潜在的问题:
myvendor/mylib
,把它强加给导入项目myvendor/mylib
-应该能够找到他需要的东西。把责任推给进口商似乎是不对的WDYT?提前谢谢。欢迎您的想法。一种方法(与@igorw在IRC freenode上讨论后得出,我正在对其进行解释,并在其上进行了一些扩展)是让bin脚本
console.php
迭代文件系统,从\uuuuu DIR\uuu
开始,寻找autoload.php
的存在,您实际上不需要迭代,只需查找两个dir,因为这将匹配//@Seldaek:对,我终于从中理解了您的示例,并以这种方式实现了它。谢谢你!似乎人们仍然对此(我!)有疑问,在这里找到了答案: