如何获取自定义脚本的Composer命令参数?

时间:2017-04-28 20:55:11

标签: php composer-php

我的目标是在创建项目后更改当前用户目录。

我正在运行composer create-project vendor/repo some-directory,我在composer.json文件中有以下部分。

{
    "scripts": {
        "post-create-project-cmd": [
            "cd /some/destination"
        ]
    }
}

所以我需要使用命令行参数中指定的some-directory动态替换/ some / destination。

有可能吗?

2 个答案:

答案 0 :(得分:2)

docs中所述:

  

什么是剧本?

     

使用Composer的术语,脚本可以是PHP   回调(定义为静态方法)或任何命令行可执行文件   命令。

所以,您可以在终端中使用mv - 类型man mv等命令获取更多信息 - :

{
    "scripts": {
        "post-create-project-cmd": [
            "mv /some/destination /some-directory",
            "cd /some-directory"
        ]
    }
}

或创建一个可调用的方法来为你处理这个问题。

{
    "scripts": {
        "post-create-project-cmd": [
            "SomeVendor\\SomeObject::renameMyDirMethod"
        ]
    }
}

答案 1 :(得分:0)

运行composer create-project vendor/repo some-directory时Composer的作用是(简化):

  • 创建 some-directory 目录(如果目录不为空,则Composer引发异常项目目录some-directory /不为空。
  • 将当前目录更改为 some-directory
  • 执行项目composer.json文件的 scripts 部分中报告的脚本(在您的情况下是从vendor / repo使用的脚本。)

因此,如果您要显示 vendor / repo 中使用的 scripts 部分,则无需将当前目录更改为创建项目的目录,因为Composer已经这样做了。
如果需要从正在创建的项目的 scripts 部分中列出的Bash脚本中获取当前目录,只需检查变量$PWD的内容,该变量等效于{ PHP中的{1}}。

作为Composer项目的示例,请参阅Composer项目ScriptHandler.php中使用的drupal-composer/drupal-project的内容。它在目录中创建一些文件,其文件名从getcwd()返回。

getcwd()

实际上,它是在当前目录中找到的目录中创建目录,但是这并没有改变将创建项目的目录设置为Composer的当前目录。