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