如何创建全局作曲家命令?

时间:2016-01-11 22:12:33

标签: command-line composer-php

我已经创建了一个作曲家命令locaload,但在全局要求之后,除了插件回购本身之外,它无法识别。所以不是很有用。

我不想将它添加到每个项目/图书馆,甚至不能,因为有些不是我的。我希望它随处可用,就像所有作曲家的命令一样。

插件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。当我在其他任何地方运行它时(不是插件' s repo本身):

[Symfony\Component\Console\Exception\CommandNotFoundException]
Command "locaload" is not defined.

当我像脚本(composer run-script locaload -- x y)那样运行时:

[InvalidArgumentException]
Script "locaload" is not defined in this package

确实没有在这个包中定义(或者我甚至不在包中),但是它存在于全局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.

1 个答案:

答案 0 :(得分:1)

脚本仅在根包中定义时才可用,因此您必须将其添加到要在其中使用的包中:

"scripts": {
    "locaload": "rdx\\localoader\\Plugin::localoadCommand"
},

但是我觉得它不是很实用,而且我认为另一种方法是在你的插件中添加"bin": "locaload"或者其他东西,这样当你在全局安装它时它会使它成为可用的二进制脚本你可以只运行locaload ...,它将作用于当前目录中的composer.json,而不是作为一个作曲家插件。您仍然可以在全局范围内使用插件部分来收听后自动加载转储。

我希望这很清楚。

相关问题