我创建了一个composer命令locaload
,但在全局需要它之后,它在任何地方都无法识别,只能在插件repo本身中识别。所以不是很有用。
我不想把它添加到每个项目/库中,甚至不能,因为有些不是我的。我希望它可以在任何地方使用,就像作曲家的所有命令一样。
插件的composer.json
:
{
"name": "rdx/composer-localoader-plugin",
"description": "Composer plugin to load some dependencies locally",
"type": "composer-plugin",
"require": {
"composer-plugin-api": "^1.0"
},
"autoload": {
"psr-4": {
"rdx\localoader\": ""
}
},
"scripts": {
"locaload": "rdx\localoader\Plugin::localoadCommand"
},
"extra": {
"class": "rdx\localoader\Plugin"
}
}
"scripts"
定义了命令:composer locaload x y
。当我在其他地方运行它时(不是插件的repo本身):
[SymfonyComponentConsoleExceptionCommandNotFoundException]
Command "locaload" is not defined.
当我像脚本一样运行它时(composer run-script locaload -- x y
):
[InvalidArgumentException]
Script "locaload" is not defined in this package
它确实没有在THIS包中定义(或者当我甚至不在包中时),但它确实存在于全局composer.json
和composer.lock
中。
如何使此命令全局识别,以便在任何项目中使用,甚至在任何非项目位置使用?
全球安装工作:
rudie@home:~$ composer global require rdx/composer-localoader-plugin:dev-master
Changed current directory to /home/rudie/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing rdx/composer-localoader-plugin (dev-master d4f5e85)
Cloning d4f5e8547a4e23c2febc2ed845e76774ea63e61a
Writing lock file
Generating autoload files
移除它也很有效,但不会改变任何事情。
当我全局检查命令列表(composer list | grep locaload
)时,它是空的。当我在插件回购中检查它时:
locaload Run the locaload script as defined in composer.json.
脚本只有在根包中定义时才可用,因此您必须将其添加到要在其中使用的包中:
"scripts": {
"locaload": "rdx\localoader\Plugin::localoadCommand"
},
但我知道这不是很实用,我想还有一种替代方法是在你的插件中添加一个"bin": "locaload"
或其他东西,这样当你全局安装它时,它就会成为一个二进制脚本,你只需要以locaload ...
的形式运行,它就会作用于当前目录中的composer.json,而不是作为一个composer插件。您仍然可以在全局范围内设置插件部分,以监听自动加载后的转储。
我希望这一点足够清楚。