pnpm run
エイリアス: run-script
パッケージのマニフェストファイルで定義されたスクリプトを実行します。
例
package.json に次のように watch というスク リプトが定義されているとしましょう。
"scripts": {
"watch": "webpack --watch"
}
pnpm run watch を使ってこのスクリプトを実行することができます! シンプルですよね? キーをなるべく打ちたくない人の ために、全てのスクリプトは pnpm コマンドのエイリアスとして設定されます。つまり、pnpm watch はただの pnpm run watch の省略です(スクリプトの名前が pnpm コマンドと被っていない限り)。
Running multiple scripts
You may run multiple scripts at the same time by using a regex instead of the script name.
pnpm run "/<regex>/"
Run all scripts that start with watch::
pnpm run "/^watch:.*/"
詳細
pnpm run は scripts を実行する際に、シェルの既存の PATH に node_modules/.bin を追加します。 つまり、パッケージがインストールされていれば、それをスクリプト内で通常のコマンドのように使えます。 例えば、 eslint がインストールされている場合、次のようにスクリプトを書けます。
"lint": "eslint src --fix"
これは eslint がシェルにグローバルにインストールされていなくても実行されます。
ワークスペースの場合は、<workspace root>/node_modules/.bin も PATH に追加されるため、ツールがワークスペースのルートにインストールされている場合、任意のワークスペースパッケージの scripts から呼び出せます。
npm run との違い
デフォルトでは、pnpm はユーザー定義スクリプトの任意の pre および post フックを実行しません (例えば prestart など) 。 この npm の機能は、スクリプトが明示的ではなく暗黙的になり、実行フローを難解にする原因となっていました。 また、 pnpm serve が pnpm preserve も実行してしまうという驚くべき実行結果にもつながりました。
If for some reason you need the pre/post scripts behavior of npm, use the enable-pre-post-scripts option.
環境変数
実行されたスクリプトに対して、 pnpm が自動的に作成する環境変数があります。 これらの環境変数を使用して、実行中のプロセスに関するコンテキスト情報を取得できます。
pnpm によって作成される環境変数は次のとおりです。
- npm_command - 実行されたコマンドの名前が含まれています。 実行されたコマンドが
pnpm runの場合、この変数の値は "run-script" になります。
Options
run コマンドのオプションは、スクリプト名の前に記載する必要があります。 スクリプト名の後に記載されたオプションは、実行されるスクリプトに渡されます。
次の例では、いずれもpnpm CLIを --silent オプション付きで実行します。
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
This runs an arbitrary command from each package's "scripts" object. If a package doesn't have the command, it is skipped. If none of the packages have the command, the command fails.
--if-present
You can use the --if-present flag to avoid exiting with a non-zero exit code when the script is undefined. This lets you run potentially undefined scripts without breaking the execution chain.