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.