npx が古いキャッシュ版を実行して最新バージョンにならない
npx は一度実行したパッケージをキャッシュし、次回以降はキャッシュ版を使うため最新が反映されない。
@latest 指定や --prefer-online、--ignore-existing で最新を取得できる。
#npm#npx#cache#version#stale
公開:
要約
npx pkg は一度実行するとそのパッケージをキャッシュし、次回以降はレジストリを確認せずキャッシュ版を使います。
そのため新しいバージョンが公開されても、npx pkg を再実行しただけでは古い版が動き続けます。
最新を使いたいときは、pkg@latest のように明示するか、--prefer-online や --ignore-existing でキャッシュ優先をやめさせます。
キャッシュ自体は起動を速くするための仕組みなので、毎回オンライン確認するとわずかに遅くなります。
常に最新が必要なツールだけ明示指定するのが現実的です。
よくある原因
- npx が実行済みパッケージをキャッシュし、再実行時にレジストリを見ない。
- バージョン無指定で実行しており、キャッシュ版で十分と判断される。
- npm キャッシュに残った古い版が優先される。
解決策
1. バージョンを明示する
npx create-something@latest@latest を付けると、キャッシュ版ではなくレジストリの最新を取得します。
2. オンライン確認を強制する
npx --prefer-online some-cli--prefer-online はレジストリの更新を毎回確認させます。
確実に既存版を無視したいときは --ignore-existing を使います。
3. キャッシュを確認して入れ直す
npm cache verifyそれでも古い版が動く場合は npm のキャッシュ状態を確認し、必要に応じてクリアして入れ直します。
CI では毎回まっさらな環境になるため、ローカルだけで再現するなら npx キャッシュをまず疑うのが近道です。
フラグの詳細は公式の npx | npm Docs を参照してください。