pnpm run
エイリアス: run-script
パッケージのマニフェストファイルで定義されたスクリプトを実行します。
例
package.json
で次のようにwatch
スクリプトが設定されているとします。
"scripts": {
"watch": "webpack --watch"
}
これで、pnpm run watch
を使用することで、そのスクリプトを実行できます!簡単ですよね?キーストロークと時間を節約したい方のために、すべてのスクリプトはpnpmコマンドとしてエイリアスが設定されることに注意してください。したがって、最終的にpnpm watch
はpnpm run watch
の省略形です(既存のpnpmコマンドと同じ名前を共有しないスクリプトの場合のみ)。
複数のスクリプトの実行
スクリプト名の代わりに正規表現を使用すると、複数のスクリプトを同時に実行できます。
pnpm run "/<regex>/"
watch:
で始まるすべてのスクリプトを実行します
pnpm run "/^watch:.*/"
詳細
シェルの既存のPATH
に加えて、pnpm run
はscripts
に提供されるPATH
にnode_modules/.bin
を含めます。これは、パッケージがインストールされている限り、通常のコマンドのようにスクリプトで使用できることを意味します。たとえば、eslint
がインストールされている場合は、次のようなスクリプトを作成できます。
"lint": "eslint src --fix"
そして、eslint
がシェルにグローバルにインストールされていなくても、実行されます。
ワークスペースの場合、<ワークスペースルート>/node_modules/.bin
もPATH
に追加されるため、ツールがワークスペースルートにインストールされている場合は、任意のワークスペースパッケージのscripts
で呼び出すことができます。
環境
pnpmが実行されるスクリプトのために自動的に作成するいくつかの環境変数があります。これらの環境変数を使用すると、実行中のプロセスに関するコンテキスト情報を取得できます。
これらはpnpmによって作成される環境変数です
- npm_command - 実行されたコマンドの名前が含まれます。実行されたコマンドが
pnpm run
の場合、この変数の値は "run-script" になります。
オプション
run
コマンドのオプションは、スクリプト名の前にリストする必要があります。スクリプト名の後にリストされたオプションは、実行されたスクリプトに渡されます。
これらはすべて--silent
オプションを指定してpnpm CLIを実行します
pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch
コマンド名の後の引数はすべて、実行されたスクリプトに追加されます。したがって、watch
がwebpack --watch
を実行する場合、このコマンドは
pnpm run watch --no-color
を実行します
webpack --watch --no-color
--recursive, -r
各パッケージの "scripts" オブジェクトから任意のコマンドを実行します。パッケージにコマンドがない場合はスキップされます。どのパッケージにもコマンドがない場合、コマンドは失敗します。
--if-present
スクリプトが未定義の場合にゼロ以外の終了コードで終了しないように、--if-present
フラグを使用できます。これにより、実行チェーンを中断することなく、潜在的に未定義のスクリプトを実行できます。
--parallel
同時実行とトポロジカルソートを完全に無視し、プレフィックス付きのストリーミング出力で、一致するすべてのパッケージで指定されたスクリプトをすぐに実行します。これは、長いビルドプロセスなど、多数のパッケージにわたる長時間実行プロセスに推奨されるフラグです。
--stream
子プロセスからの出力を、発生元のパッケージディレクトリをプレフィックスとして付けて即座にストリームします。これにより、異なるパッケージからの出力をインターリーブすることができます。
--aggregate-output
並行して実行される子プロセスからの出力を集計し、子プロセスが完了したときにのみ出力します。pnpm -r <command>
を--parallel
または--workspace-concurrency=<number>
とともに実行した後に大きなログを読みやすくします(特にCIで)。--reporter=append-only
のみがサポートされています。
--resume-from <package_name>
特定のプロジェクトから実行を再開します。これは、大規模なワークスペースで作業していて、ビルド順序で前のすべてのプロジェクトを実行せずに、特定のプロジェクトでビルドを再開したい場合に役立ちます。
--report-summary
スクリプト実行の結果をpnpm-exec-summary.json
ファイルに記録します。
pnpm-exec-summary.json
ファイルの例
{
"executionStatus": {
"/Users/zoltan/src/pnpm/pnpm/cli/command": {
"status": "passed",
"duration": 1861.143042
},
"/Users/zoltan/src/pnpm/pnpm/cli/common-cli-options-help": {
"status": "passed",
"duration": 1865.914958
}
}
status
の可能な値は、'passed'、'queued'、'running'です。
--reporter-hide-prefix
並行して実行される子プロセスからの出力からワークスペースのプレフィックスを非表示にし、生の出力のみを出力します。これは、CIで実行していて、出力がプレフィックスなしの特定の形式である必要がある場合に役立ちます(例:GitHub Actionsのアノテーション)。--reporter=append-only
のみがサポートされています。
--filter <package_selector>
.npmrcの設定
enable-pre-post-scripts
- デフォルト: true
- 型: Boolean
true
の場合、pnpmは任意のpre/postスクリプトを自動的に実行します。したがって、pnpm foo
を実行すると、pnpm prefoo && pnpm foo && pnpm postfoo
を実行するようになります。
script-shell
- デフォルト: null
- 型: path
pnpm run
コマンドで実行するスクリプトに使用するシェル。
たとえば、WindowsでGit Bashの使用を強制するには
pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
- デフォルト: false
- 型: Boolean
true
の場合、pnpmはスクリプトを実行するためにbashのようなシェルのJavaScript実装を使用します。
このオプションは、クロスプラットフォームスクリプトを簡素化します。たとえば、デフォルトでは、次のスクリプトはPOSIX準拠でないシステムでは失敗します。
"scripts": {
"test": "NODE_ENV=test node test.js"
}
ただし、shell-emulator
設定がtrue
に設定されている場合は、すべてのプラットフォームで機能します。