javascript - Eroare la rularea scriptului npm cu Yarn: "ERR spawn EINVAL"


Întâmpin o eroare atunci când încerc să rulez un script npm care implică Yarn. Iată succesiunea evenimentelor:

  1. Am inițializat un proiect cu create-react-app.
  2. Am adăugat următorul script în fișierul meu package.json
"scripts": {
    "lint": "yarn add -D prettier && yarn add -D babel-eslint && npx install-peerdeps --dev eslint-config-airbnb && yarn add -D eslint-config-prettier eslint-plugin-prettier"
}
  1. Când rulez npm run lint, sunt întrebat dacă vreau să folosesc Yarn, la care răspund cu „y”.
  2. Totuși, primesc următoarea eroare: "ERR spawn EINVAL".

Am încercat să instalez Yarn la nivel global folosind npm install -g yarn, dar problema persistă. Am verificat pentru orice setări de configurare relevante sau variabile de mediu, dar nu am putut găsi nicio cauză aparentă a erorii.

Mediul meu: Windows 11

> node --version  
v20.12.2
> npm --v
10.5.0
> yarn --v
yarn install v1.22.22

Răspuns #1

Eroarea a fost cauzată de o actualizare de securitate în Node.js.

De pe acel blog:

Este important de menționat că a avut loc o schimbare majoră pentru utilizatorii de Windows care folosesc child_process.spawn și child_process.spawnSync. Node.js va genera acum eroarea EINVAL dacă un fișier .bat sau .cmd este transmis către child_process.spawn și child_process.spawnSync fără ca opțiunea shell să fie setată. Dacă intrarea pentru spawn/spawnSync este sanitizată, utilizatorii pot transmite acum { shell: true } ca opțiune pentru a preveni apariția erorilor EINVAL.

Deoarece comanda pe care ai rulat-o (install-peerdeps) a apelat metoda spawn fără ca acea opțiune să fie setată (link către cod), scriptul a eșuat cu acea eroare.

Acest blog a introdus, de asemenea, o soluție alternativă, deși nu este recomandată, și nu sunt sigur dacă funcționează cu npx:

Deși este posibil să treceți și --security-revert=CVE-2024-27980 pentru a inversa patch-ul de securitate, recomandăm cu tărie să nu faceți acest lucru.

Dacă aveți cu adevărat nevoie ca dependențele peer să fie instalate automat, poate fi necesar să scrieți propriul script sau să treceți la managerul de pachete npm, care suportă acest lucru începând cu versiunea 7.

Răspunsul #2

De asemenea, mă confruntam cu această problemă și am încercat câteva lucruri, dar revenirea la versiunea Node.js 18 LTS a ajutat și acum aplicațiile funcționează bine.