できない.dev

npx が古いキャッシュ版を実行して最新バージョンにならない

npx は一度実行したパッケージをキャッシュし、次回以降はキャッシュ版を使うため最新が反映されない。
@latest 指定や --prefer-online、--ignore-existing で最新を取得できる。

#npm#npx#cache#version#stale

公開:

要約

npx pkg は一度実行するとそのパッケージをキャッシュし、次回以降はレジストリを確認せずキャッシュ版を使います。

そのため新しいバージョンが公開されても、npx pkg を再実行しただけでは古い版が動き続けます。

最新を使いたいときは、pkg@latest のように明示するか、--prefer-online--ignore-existing でキャッシュ優先をやめさせます。

キャッシュ自体は起動を速くするための仕組みなので、毎回オンライン確認するとわずかに遅くなります。
常に最新が必要なツールだけ明示指定するのが現実的です。

よくある原因

  1. npx が実行済みパッケージをキャッシュし、再実行時にレジストリを見ない。
  2. バージョン無指定で実行しており、キャッシュ版で十分と判断される。
  3. 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 を参照してください。

この記事は役立ちましたか?