web-dev-qa-db-ja.com

糸:1つのモジュール(またはレジストリ)の依存関係ハッシュ検証を無視することは可能ですか?

yarn.lockファイルは、すべての依存関係バージョンとモジュールのハッシュを保存します。オプション--skip-integrity-checkを使用して、このハッシュチェックをグローバルに無効にできることを知っています。

内部モジュールは継続的に開発されています。依存関係は、実際にはスナップショットパッケージのものです。更新されたパッケージハッシュはyarn.lockの保存されたハッシュと異なるため、更新されると、継続的統合環境で失敗します。

特定のモジュールだけの整合性チェックを無効にすることは可能ですか?

特定のレジストリのすべてのモジュールのチェックを無効にする方法を指示している場合でも、答えを受け入れます。

Update:私の問題は、コードに変更がなくても、依存関係が更新されると継続的インテグレーションサーバージョブが壊れることです。これらは偽の失敗であり、私はそれらを止めたいです。

Update 2:受け入れられている解決策は、通常の開発ワークフローの問題を解決するためのハックです。 GitHubでYarnに対して未解決の問題 があり、この問題を修正します。

13
neves

実行する代わりに

yarn install

以下のように実行する必要があります

yarn add <specificpackage>@^<versions> --update-checksums
yarn install

これにより、yarn.lockがそのパッケージの最新のハッシュで更新され、yarn installが整合性チェック付きで残りのパッケージをインストールするようになります。

アップデート-1:4月20日

別の可能なオプションは、preinstallフックを使用することです。ここで試すことができることはほとんどありません。パッケージを更新してみてください。ただし、yarnpreinstallコマンドを再度起動すると、無限ループが発生する可能性があることに注意してください。

したがって、grepawk、またはsedコマンドを実行して、yarn.lockファイル内のパッケージエントリを取得することをお勧めします。これにより、yarn installコマンドにハッシュに関する情報が含まれなくなり、不一致が発生しなくなります。

Windowsの互換性のためにawksed、または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.jsonscriptsセクションを更新します

...
"preinstall": "node yarn_remove_hash.js"
...
8
Tarun Lalwani