Donc, pour l'instant, il semble qu'il n'y ait pas de yarn audit --fix
, donc j'essaie de comprendre comment réparer mon yarn audit
les erreurs.
J'ai essayé un yarn upgrade
qui a corrigé certaines erreurs (ce qui est bien), mais il en reste encore plusieurs.
J'ai ensuite essayé un yarn add <package>@latest
pour les vulnérabilités élevées restantes, mais il met à niveau la version dans mon package.json
, quand je pense que le problème vient d'une dépendance d'un paquet que j'utilise.
Voici un exemple de certaines de mes erreurs restantes:
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-stream > glob > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-stream > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > glob > │
│ │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ moderate │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/782 │
└───────────────┴──────────────────────────────────────────────────────────────┘
La solution à ce problème dans le fil s'appelle résolutions de versions sélectives qui définit fondamentalement resolutions
pour les dépendances transitives dans le package.json
.
Le transitive dependencies
sont les dépendances des dépendances.
{
"resolutions": { "**/**/lodash": "^4.17.12" }
}
Ainsi, même si le lodash n'est pas une dépendance directe de votre package, le package dépendant de votre package utilise la version définie dans les résolutions. Des résolutions spécifiques peuvent également être fournies. Plus d'informations ici .
Bien que resolutions
fonctionne, ce n'est pas la solution optimale, car:
package.json
avec des résolutions de dépendances transitivesA
dépend de B@^4.0.0
Et que vous mettez à jour B et le résolvez en ^4.3.2
. Quelque temps plus tard, A obtient une mise à jour et nécessite B@^5.0.0
, Mais vous résolvez toujours B en ^4.3.2
, Qui n'est plus compatible.Voici une autre façon de mettre à jour les dépendances transitives:
yarn.lock
yarn install
De cette façon, vous forcez Yarn à résoudre à nouveau la dépendance et dans la plupart des cas, Yarn installera une version plus récente de ce que vous avez supprimé de yarn.lock
.
Exemple: supposons que vous vouliez mettre à jour [email protected]
Vulnérable, alors vous devez supprimer une entrée comme celle-ci de votre yarn.lock
:
[email protected]:
version "0.0.8"
resolved "http://10.0.0.1/repository/npm-registry/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
puis exécutez yarn install
.
Si cela n'aide pas:
Essayez de mettre à jour les dépendances plus élevées dans la chaîne de dépendance:
yarn why <dependency>
Pour savoir quels paquets le tirentyarn.lock
Puis d'exécuter yarn install
Exemple:
Voici un exemple, où nous mettons à jour une dépendance transitive minimist
:
$ yarn why minimist
.....
=> Found "mkdirp#[email protected]"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#[email protected]"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
minimist
de yarn.lock et exécutez yarn install
-> cela n'aide pas, probablement parce que mkdirp
et optimist
nécessitent exactement [email protected]
et [email protected]
minimist
de yarn.lock: mkdirp
et optimist
.yarn install
.Exécutez à nouveau yarn why minimist
:
$ yarn why minimist
.....
=> Found "mkdirp#[email protected]"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#[email protected]"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
Ici, nous voyons que [email protected]
A été mis à jour vers [email protected]
, Mais [email protected]
Existe toujours.
Supprimez la dépendance suivante dans la chaîne de dépendances de yarn.lock
: handlebars
yarn install
yarn why minimist
- rien n'a changé, [email protected]
Est toujours là.yarn.lock
: istanbul-reports
yarn install
yarn why minimist
: [email protected]
N'est plus là, car istanbul-reports
A été mis à jour.