yarn.lock
ファイルは、すべての依存関係バージョンとモジュールのハッシュを保存します。オプション--skip-integrity-check
を使用して、このハッシュチェックをグローバルに無効にできることを知っています。
内部モジュールは継続的に開発されています。依存関係は、実際にはスナップショットパッケージのものです。更新されたパッケージハッシュはyarn.lockの保存されたハッシュと異なるため、更新されると、継続的統合環境で失敗します。
特定のモジュールだけの整合性チェックを無効にすることは可能ですか?
特定のレジストリのすべてのモジュールのチェックを無効にする方法を指示している場合でも、答えを受け入れます。
Update:私の問題は、コードに変更がなくても、依存関係が更新されると継続的インテグレーションサーバージョブが壊れることです。これらは偽の失敗であり、私はそれらを止めたいです。
Update 2:受け入れられている解決策は、通常の開発ワークフローの問題を解決するためのハックです。 GitHubでYarnに対して未解決の問題 があり、この問題を修正します。
実行する代わりに
yarn install
以下のように実行する必要があります
yarn add <specificpackage>@^<versions> --update-checksums
yarn install
これにより、yarn.lock
がそのパッケージの最新のハッシュで更新され、yarn install
が整合性チェック付きで残りのパッケージをインストールするようになります。
アップデート-1:4月20日
別の可能なオプションは、preinstall
フックを使用することです。ここで試すことができることはほとんどありません。パッケージを更新してみてください。ただし、yarn
でpreinstall
コマンドを再度起動すると、無限ループが発生する可能性があることに注意してください。
したがって、grep
、awk
、またはsed
コマンドを実行して、yarn.lock
ファイル内のパッケージエントリを取得することをお勧めします。これにより、yarn install
コマンドにハッシュに関する情報が含まれなくなり、不一致が発生しなくなります。
Windowsの互換性のためにawk
、sed
、またはgrep
を使用したくない場合は、単純なnodejsスクリプトを記述して、yarn.lock
からパッケージを削除する必要があります。ファイル。これはクロスOS互換です。以下のコードは同じことをする方法を示しています
yarn_remove_hash.js
const fs = require('fs')
const content = fs.readFileSync("yarn.lock", "utf-8");
const packageToDelete = "yallist"
let lines = content.split("\n")
for (let [i, line] of Object.entries(lines)) {
if (line.startsWith(packageToDelete + "@")) {
lines[i]="";
let y = i;
while (lines[++y][0] ==" "){
lines[y]= ""
}
}
}
fs.writeFileSync("yarn.lock", lines.join("\n"))
そして、以下のようにpackage.json
のscripts
セクションを更新します
...
"preinstall": "node yarn_remove_hash.js"
...