web-dev-qa-db-ja.com

Composer-開発環境でのみスクリプトを実行します

これは私の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
30
Richard Knop

スクリプトをトリガーせずに非開発環境の更新を行うには、 the --no-scriptsupdateコマンドのコマンドラインスイッチ

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

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

それ以外には、スクリプトを自動的に区別する方法はありません。

42
hakre

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

12
Christian Koch

はじめに

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

適切なオプションを決定してください

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

スクリプトをトリガーしませんdocs

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

ドキュメントの読み取り:--no-scripts:composer.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>"
    ]
}

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

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

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

PHP scriptで条件を定義する( docs

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

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

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

<?php

namespace AppNameSpaceName;

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

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

ヤーンランdocs

現在、ほとんどの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-servertestbuildのスクリプトを作成できます。

7
Webber

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

"scripts": {
    "post-install-cmd": [
        "[ $COMPOSER_DEV_MODE -eq 0 ] || echo devmode only"
    ]
},
6
Veda

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

"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を実行します

6
Ali Gangji

ここに小さなパッケージがあります https://github.com/neronmoon/scriptsdev dev-onlyスクリプトを定義する機能を追加します。使用法

...
"extra": {
    "scripts-dev": {
    "post-install-cmd": [
        "npm install --dev"
    ],
    "post-update-cmd": "php ./someCoolCommand.php"
    },
}
...
2

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

 composer update --no-scripts
0
Majbah Habib