38

これは私のcomposer.jsonファイルです:

"require": {
    "php": ">=5.4",
    "zendframework/zendframework": "2.*",
    "doctrine/doctrine-module": "dev-master",
    "doctrine/doctrine-orm-module": "0.*",
    "gedmo/doctrine-extensions": "dev-master"
},
"require-dev": {
    "phpunit/phpunit": "3.7.*"
},
"scripts": {
    "post-update-cmd": [
        "rm -rf vendor/Behat",
        "git clone git://github.com/Behat/Behat.git",
        "cp composer.phar Behat/composer.phar",
        "cd Behat && git submodule update --init",
        "cd Behat && php composer.phar install",
        "cd Behat && php composer.phar require guzzle/guzzle:3.0.*",
        "mv Behat vendor/Behat",
        "ln -sf ../Behat/bin/behat vendor/bin/"
    ]
}

スクリプトが開発環境でのみ実行されるようにするにはどうすればよいですか?

基本的に、次の呼び出し時にのみスクリプトを実行する必要があります。

php composer.phar update --dev
4

7 に答える 7

56

スクリプトをトリガーせずに非開発環境の更新を行うには、次のコマンドのコマンド--no-scriptsラインスイッチをupdate使用します。

php composer.phar update --no-scripts
                         ^^^^^^^^^^^^

デフォルトでは、Composerスクリプトは基本パッケージでのみ実行されます。したがって、開発用に1つのパッケージを用意し、ライブ環境でそれをライブシステムに依存させることができます。

それを除けば、スクリプトを自動的に区別する方法がわかりません。

于 2012-10-26T13:00:45.223 に答える
25

序章

答えのいくつかは少し簡潔であり、これが行われるコンテキストについては詳しく説明していません。以前の回答を読んだ後もまだ困惑している人と知識を共有したいと思います。

あなたにぴったりのオプションを決定する

まず、特定の環境(つまり、開発サーバー/コンテナー)に固有の異なるフローを効果的に作成していることを理解してください。これは、一般的にエラーが発生しやすいため、ベストプラクティスに反します。そうは言っても、あなたはいくつかの方法であなたが望むことを達成することができます。

スクリプトをトリガーしないdocs

一部の環境でスクリプトをトリガーしたくない場合は、--no-scriptsフラグを使用してこれを防ぐことができます。

ドキュメントの読み取り:: --no-scriptscomposer.jsonで定義されたスクリプトの実行をスキップします。

composer upgrade --no-scripts

これは、コードが現在機能していないときにパッケージをアップグレードする場合に特に便利です。スクリプトが開発とテストに関連している場合にも機能します。

1つのスクリプトを個別に実行するdocs

必要に応じて特定のコマンドを実行するだけです。

composer run-script [--dev] [--no-dev] script

これは、特定の機会にのみスクリプトを実行する場合に役立ちます。

たとえば、テストを実行する前に特定のスクリプトを実行する必要があるビルドシステムでは、ビルドシステムは、上記のようなカスタムスクリプトを呼び出すための構成オプションを提供します。

コマンドで条件を定義するdocs

ドキュメントの読み取り:composerのインストールまたは更新プロセス中に、という名前の変数COMPOSER_DEV_MODEが環境に追加されます。コマンドが--no-devフラグを指定して実行された場合、この変数は0に設定され、それ以外の場合は1に設定されます。

例は次のようになります

"scripts": {
    "post-install-cmd": [
         "[ $COMPOSER_DEV_MODE -eq 0 ] || <your command>"
    ]
}

個人的には、コンテナを使用している場合はこれが推奨される方法だと思います。

注:これはWindowsでは機能しません。必要になるため%COMPOSER_DEV_MODE%です。

また、composer.jsonのセクションのセクションを使用して、すべてのコマンドで上記を入力しなくても同じ目標を達成するのに役立つパッケージ(neronmoonによるscriptsdevなど)もあります。dev-scriptsextra

PHPスクリプトで条件を定義するdocs

PHPメソッドを呼び出します。このメソッドは、アプリケーションがすでにこれを行っている方法に基づいて環境をチェックします。上記の方法と組み合わせることで、この条件を再利用することもできます。「コマンドでの条件の定義」。

"scripts": {
    "post-update-cmd": [
        "AppNameSpaceName\\YourClassName::methodName"
    ]
}

次に、次のようにクラスを作成します。

<?php

namespace AppNameSpaceName;

class YourClassName 
{
    methodName() {
         // do stuff
    }
}

多くの最新のフレームワークには、アプリケーションのランタイム環境を決定するためのメカニズムがすでに存在します(Symfonyの方法Laravelの方法)。

ヤーンランドキュメント

最近のほとんどのPHPアプリケーションはjavascriptファイルもトランスパイルするため、NPMまたはYarnのいずれかがインストールされます。スクリプトセクションを使用して、この部分を開発マシン/コンテナーでのみ実行できます。例えば:

yarn run dev-only-script

package.jsonにセクションがあります

"scripts": {
    "dev-only-script": "rm some/folder && ln -s path/to/your/folder some/"
}

これのポイントは、composer.jsonをクリーンにすることです。dev-serverヤーンでは、、、testおよびのスクリプトを使用できますbuild

于 2018-10-27T14:01:17.047 に答える
13

デフォルトのインストールと--devオプションに異なるスクリプトを選択することはできませんが、Composer \ Script \ EventのメソッドisDevMode()を使用して、開発環境でのみコマンドを実行できます。http://getcomposer.org/apidoc/master/Composer/Script/Event.html

于 2013-02-26T09:29:57.837 に答える
11

COMPOSER_DEV_MODE環境変数(バージョン1.3.0-RCの新機能-2016-12-11)を使用できます。

"scripts": {
    "post-install-cmd": [
        "[ $COMPOSER_DEV_MODE -eq 0 ] || echo devmode only"
    ]
},
于 2018-09-05T10:16:44.023 に答える
6

post-update-cmdフックを使用する代わりに、開発パスウェイのカスタムスクリプトを設定することで、同じ効果を得ることができます。

"scripts": {
    "update-behat": [
        "rm -rf vendor/Behat",
        "git clone git://github.com/Behat/Behat.git",
        "cp composer.phar Behat/composer.phar",
        "cd Behat && git submodule update --init",
        "cd Behat && php composer.phar install",
        "cd Behat && php composer.phar require guzzle/guzzle:3.0.*",
        "mv Behat vendor/Behat",
        "ln -sf ../Behat/bin/behat vendor/bin/"
    ],
    "dev-update": [
        "@composer update --dev",
        "@update-behat"
    ]
}

次に、単に実行しますphp composer.phar dev-update

于 2016-07-18T14:31:40.587 に答える
2

これが小さなパッケージで、これを行うために使用できます https://github.com/neronmoon/scriptsdev これにより、devスクリプトのみを定義する機能が追加されます。利用方法

...
"extra": {
    "scripts-dev": {
    "post-install-cmd": [
        "npm install --dev"
    ],
    "post-update-cmd": "php ./someCoolCommand.php"
    },
}
...
于 2017-12-20T09:15:18.553 に答える
2

次のコマンドを実行します。

 composer update --no-scripts
于 2018-02-13T07:47:41.753 に答える