web-dev-qa-db-ja.com

Travisキャッシュnode_modulesまたは$ HOME / .npmが必要ですか

どのディレクトリがキャッシングに最適かについて、私はかなり混乱しています。私は使用と推奨の両方を確認しましたが、なぜどちらか一方に進む理由についての実際の比較はありません。

たとえば、Travis blogitself は以下を推奨します。

cache:
  directories:
    - node_modules

ただし、 数千の場所 代わりにこれを使用します。

cache:
  directories:
    - $HOME/.npm

それでは、なぜ一方を他方で使用し、なぜ両方を含めないのでしょうか。

30
balupton

node_modulesキャッシュをキャッシュすると回避できたのに対し、.npmフォルダーをキャッシュすると問題(ビルド失敗)が発生することに気付きました。これは、.npmキャッシュにはコンパイル済みのネイティブモジュールが格納されず、node_modulesフォルダーには格納されるためと考えられます。したがって、Travis-CIで一般的であるように、nodeのさまざまなバージョンをテストすると、たとえばnode 4のnode 6およびbarf用にコンパイルされたネイティブモジュールをロードしようとします。

25

@Johnの回答をフォローアップします。

package-lock.jsonのパッケージ依存関係を厳密に守るために、Travis CIのnpmインストールプロセスは、npm ciではなく、デフォルトで新しいnpm installciは、継続的インテグレーションを表します)にデフォルト設定されます。 。これは、適切なセマンティックバージョニングに従っていないパッケージのインストールを防ぐのに役立ちます。

これを行うには、最初にnpm ciが依存グラフと以前のビルドからnode_modulesにキャッシュされたすべてのコンパイル済みモジュールを削除して、依存グラフを再構築する必要があります。これは、独自のインストールを開始する前にnode_modulesを完全に削除することによって行われます。ただし、これはnode_modulesがTravisのキャッシュの場所として使用できなくなったことも意味します。ここで、"$HOME/.npm"を使用してキャッシュする必要があります。@ Johnは、「$ HOME/.npm」を​​使用して理由を説明しています。 "/node_modules/.bin/npm cannot be found"node_modulesの実行時に削除されているため、node_modulesをキャッシュの場所として引き続き使用すると、Travisはnpm ciに対して不平を言うエラーをスローします。

次に、使用するキャッシュの場所について...

1. "$ HOME/.npm"

現在のデフォルトのnpm ciを使用する場合は、これらの変更を.travis.ymlに含めます。

# [optional] `npm ci` is now default on Travis
install:
- npm ci

# Keep the npm cache around to speed up installs
cache:
  directories:
  - "$HOME/.npm"

2.「node_modules」

古いnpm installを使い続ける場合

# Specify `npm install`
install:
- npm install

# Continue to use the old cache location
cache:
  directories:
  - "node_modules"

警告:キャッシュの場所は、インストール方法に従って厳密に使用され、別の場所と絡み合わせることができません。そうしないと、キャッシングの利点が失われるか、さらにはTravisビルドが失敗することになります。これがあなたの質問に答えてくれることを願っています。

npm ciの詳細については、 公式ドキュメント を参照してください。

7
Hank Chan