web-dev-qa-db-fra.com

Yarn: est-il possible d'ignorer la validation de hachage de dépendance d'un seul module (ou registre)?

Le yarn.lock le fichier enregistre toutes les versions des dépendances et les hachages des modules. Je sais que je peux désactiver globalement cette vérification de hachage avec l'option --skip-integrity-check.

Nous avons un module interne qui est continuellement développé. La dépendance est en fait un package d'instantanés. Lorsqu'il est mis à jour, il échoue dans notre environnement d'intégration continue car le hachage de package mis à jour est différent du hachage enregistré yarn.lock.

Est-il possible de désactiver le contrôle d'intégrité uniquement pour un module spécifique?

J'accepterai la réponse même si elle indique comment désactiver la vérification de tous les modules d'un registre spécifique.

Mise à jour: Mon problème est que mon travail de serveur d'intégration continue se casse lorsque la dépendance est mise à jour, même s'il n'y a aucune modification dans mon code. Ce sont de faux défauts et je veux les arrêter.

Mise à jour 2: La solution acceptée est vraiment un hack pour résoudre un problème dans un workflow de développement habituel. Il y a un problème ouvert pour Yarn dans GitHub pour résoudre ce problème.

13
neves

Au lieu de courir

yarn install

Vous devez l'exécuter comme ci-dessous

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

Cela garantira que le yarn.lock est mis à jour avec le dernier hachage de ce package, puis yarn install installera le reste des paquets avec vérification d'intégrité

Mise à jour-1: 20-avril

Une autre option possible consiste à utiliser le crochet preinstall. Il y a peu de choses que vous pouvez essayer ici. Vous pouvez essayer de mettre à jour le package. Mais sachez que le lancement de la commande yarn dans preinstall peut provoquer des boucles infinies.

Il est donc préférable d'exécuter une commande grep, awk ou sed et de récupérer l'entrée de package dans le yarn.lock fichier. Cela garantira que le yarn install la commande ne contient aucune information sur le hachage et aucune incompatibilité ne peut se produire

Si vous ne souhaitez pas utiliser awk, sed ou grep en raison de la compatibilité de Windows, vous devez simplement écrire un simple script nodejs pour vous débarrasser du package du yarn.lock fichier. Cela sera compatible avec plusieurs systèmes d'exploitation. Le code ci-dessous montre comment faire de même

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"))

Et vous mettrez à jour votre section scripts dans package.json comme ci-dessous

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