【问题标题】:Run command line command in composer.json在 composer.json 中运行命令行命令
【发布时间】:2018-07-18 20:12:09
【问题描述】:

我正在尝试编写一个 composer.json 文件,该文件将连续运行多个命令行命令,因此就像这样的示例:

"scripts": {
   "test": [
        "@createDir"
   ],
   "createDir": "mkdir testing"

}

当我使用composer.phar update 在终端中运行作曲家文件时,该目录并未创建。谁能指出正确的方向如何做到这一点或我做错了什么?

【问题讨论】:

标签: php json command-line


【解决方案1】:

默认情况下,Composer 不会在 installupdate 的末尾运行所有脚本。为此,您的脚本需要位于 Command Event 键之一下,例如post-update-cmd.

您仍然可以在这些块中引用其他脚本,例如

"scripts": {
    "post-install-cmd": [
        "@test"
    ],
    "test": [
        "touch foo"
    ]
}

要运行单个脚本,请使用run-script 命令:

composer run-script test

【讨论】:

  • 也可以使用:composer test
【解决方案2】:

可能结构不对,我举个例子:

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.3.*",
    "acacha/admin-lte-template-laravel": "dev-master",
    "yajra/laravel-datatables-oracle": "^6.21",
    "barryvdh/laravel-dompdf": "^0.7.0",
    "spatie/laravel-backup": "^3.0.0"
},
"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~5.0",
    "symfony/css-selector": "3.1.*",
    "symfony/dom-crawler": "3.1.*"
},
"autoload": {
    "classmap": [
        "database",
        "App/Helpers/MyCustomHelper"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},
"scripts": {
    "post-root-package-install": [
        "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ],
    "post-install-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postInstall",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postUpdate",
        "php artisan optimize"
    ]
},
"config": {
    "preferred-install": "dist"
}
}

编辑:也许你可以试试composer dump-autoload

【讨论】:

    【解决方案3】:

    如果您想运行一个应该永远运行的命令,这将对您有所帮助

    在 composer.json 中

    "scripts": {
       
        "start-lumen" : [
            "php -S localhost:8000 -t public"
        ]
    }
    
    

    添加 --timeout=0 以永久运行

    composer run-script  start-lumen --timeout=0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2019-05-28
      • 2011-03-10
      • 2018-07-18
      • 1970-01-01
      • 2018-01-30
      • 2020-06-08
      相关资源
      最近更新 更多