序章
答えのいくつかは少し簡潔であり、これが行われるコンテキストについては詳しく説明していません。以前の回答を読んだ後もまだ困惑している人と知識を共有したいと思います。
あなたにぴったりのオプションを決定する
まず、特定の環境(つまり、開発サーバー/コンテナー)に固有の異なるフローを効果的に作成していることを理解してください。これは、一般的にエラーが発生しやすいため、ベストプラクティスに反します。そうは言っても、あなたはいくつかの方法であなたが望むことを達成することができます。
スクリプトをトリガーしない(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>"
]
}
個人的には、コンテナを使用している場合はこれが推奨される方法だと思います。
注:これはWindowsでは機能しません。必要になるため%COMPOSER_DEV_MODE%
です。
また、composer.jsonのセクションのセクションを使用して、すべてのコマンドで上記を入力しなくても同じ目標を達成するのに役立つパッケージ(neronmoonによるscriptsdevなど)もあります。dev-scripts
extra
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
。