メインコンテンツまでスキップ
Version: Next

pnpm run

エイリアス: run-script

パッケージのマニフェストファイルで定義されたスクリプトを実行します。

package.json に次のように watch というスクリプトが定義されているとしましょう。

"scripts": {
"watch": "webpack --watch"
}

pnpm run watch を使ってこのスクリプトを実行することができます! シンプルですよね? キーをなるべく打ちたくない人のために、全てのスクリプトは pnpm コマンドのエイリアスとして設定されます。つまり、pnpm watch はただの pnpm run watch の省略です(スクリプトの名前が pnpm コマンドと被っていない限り)。

詳細情報

シェルの既存の PATH に加え、pnpm runscripts に対し、 node_modules/.binPATH に追加します。 これは、パッケージをインストールすれば、それをスクリプト内で通常のコマンドのように使えることを意味します。 例えば、 eslint がインストールされている場合:

"lint": "eslint src --fix"

また、 eslint がシェルにグローバルにインストールされていなくても、実行されます。

ワークスペースの場合、<workspace root>/node_modules/.binPATH に追加されるため、ツールがワークスペースルートにインストールされている場合、任意のワークスペースパッケージの scripts から呼び出すことができます。

npm run との違い

デフォルトでは、pnpm はユーザー定義スクリプト (prestart など) の任意の pre および post フックを実行しません。 npmから受け継いだこの動作は、スクリプトが明示的ではなく暗黙的になり、実行フローを難解にする原因となっていました。 また、 pnpm servepnpm preserve も実行してしまうという驚くべき実行結果にもつながりました。

何らかの理由で npm の pre/post スクリプトの動作が必要な場合は、enable-pre-post-scripts オプションを使用します。

Options

runコマンドのオプションは、スクリプト名の前に記載する必要があります。 スクリプト名の後に記載されているオプションは、実行されるスクリプトに渡されます。

いずれもpnpm CLIを--silentオプション付きで実行します。

pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch

コマンド名の後に引数がある場合は、実行されるスクリプトに追加されます。 つまり、watchwebpack --watchを実行した場合、このコマンドを実行することになります:

pnpm run watch --no-color

次のように実行されます:

webpack --watch --no-color

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 はスクリプトの実行に JavaScript の bash-like shellの実装を使用します。

このオプションは、クロスプラットフォームのスクリプト処理を簡単にします。 例えば、デフォルトでは、次のスクリプトはPOSIXに準拠していないシステムで失敗します:

"scripts": {
"test": "NODE_ENV=test node test.js"
}

しかし、 shell-emulator の設定を true にすれば、すべてのプラットフォームで動作するようになります。

--recursive, -r

これは、各パッケージの "scripts" オブジェクトから任意のコマンドを実行するものです。 そのコマンドがないパッケージはスキップされます。 どのパッケージもそのコマンドを持っていない場合、コマンドは失敗します。

--if-present

if-present フラグを使用すると、スクリプトが未定義のときに0以外の終了コードで終了するのを避けることができます。 これにより、未定義の可能性があるスクリプトを、実行の過程を断ち切ることなく実行できます。

--parallel

並行性とトポロジカルソートの結果を完全に無視して、マッチする全てのパッケージに対して指定されたスクリプトを即時実行し、接頭辞付きのストリームで出力します。 このフラグは、多くのパッケージで長時間実行される処理、例えば、長時間のビルド処理に適しています。

--stream

子プロセスからの出力を、元のパッケージのディレクトリを先頭に、即座にストリーム出力します。 これにより、異なるパッケージからの出力をインターリーブすることができます。

--aggregate-output

並行して実行される子プロセスの出力を集約し、子プロセスが終了したときのみ出力を表示します。 pnpm -r <command>--parallel または --workspace-concurrency=<number> と共に実行した後の大きなログを読むのが非常に簡単になります (特に CI の場合)。 --reporter=append-only のみサポートします。

enable-pre-post-scripts

  • デフォルト: false
  • タイプ: Boolean

true の場合、pnpm は任意の pre/post スクリプトを自動的に実行します。 つまり、pnpm foo を実行すると、pnpm prefoo && pnpm foo && pnpm postfoo を実行するのと同じことになります。

--filter <package_selector>

詳細についてはフィルタリングに関するドキュメントを参照してください。