如何创建全局composer命令



我创建了一个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.jsoncomposer.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插件。您仍然可以在全局范围内设置插件部分,以监听自动加载后的转储。

我希望这一点足够清楚。

相关内容

  • 没有找到相关文章

最新更新