javascript - Ralat semasa menjalankan skrip npm dengan Yarn: "ERR spawn EINVAL"
Saya menghadapi ralat semasa cuba menjalankan skrip npm yang melibatkan Yarn. Berikut adalah urutan peristiwa:
- Saya telah memulakan projek dengan create-react-app.
- Menambahkan skrip berikut ke fail package.json saya
"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"
}
- Apabila saya menjalankan npm run lint, saya diminta sama ada ingin menggunakan Yarn, yang mana saya menjawab dengan 'y'.
- Walau bagaimanapun, saya mendapat ralat berikut: "ERR spawn EINVAL".
Saya telah mencuba memasang Yarn secara global menggunakan npm install -g yarn, tetapi masalah itu masih berterusan. Saya telah memeriksa sebarang tetapan konfigurasi atau pembolehubah persekitaran yang berkaitan, tetapi tidak dapat menemui sebarang punca jelas bagi ralat itu.
Persekitaran saya: Windows 11
> node --version
v20.12.2
> npm --v
10.5.0
> yarn --v
yarn install v1.22.22
Jawapan #1
Ralat itu disebabkan oleh kemas kini keselamatan dalam Node.js.
Daripada blog itu:
Adalah penting untuk diperhatikan bahawa telah berlaku perubahan besar bagi pengguna Windows yang menggunakan
child_process.spawndanchild_process.spawnSync. Node.js kini akan menghasilkan ralat denganEINVALjika fail.batatau.cmddimasukkan ke dalamchild_process.spawndanchild_process.spawnSynctanpa pilihanshellditetapkan. Jika input kepadaspawn/spawnSyncdibersihkan, pengguna kini boleh menghantar{ shell: true }sebagai pilihan untuk mengelakkan berlakunya ralat EINVAL.
Oleh kerana arahan yang anda jalankan (install-peerdeps) memanggil kaedah spawn tanpa pilihan itu disetkan (pautan ke kod), skrip tersebut gagal dengan ralat itu.
Blog itu juga memperkenalkan penyelesaian sementara, walaupun ia tidak disyorkan, dan saya tidak pasti jika ini berfungsi dengan npx:
Walaupun adalah mungkin untuk juga menghantar
--security-revert=CVE-2024-27980untuk membatalkan tampalan keselamatan, kami amat menasihatkan agar tidak melakukannya.
Jika anda benar-benar memerlukan kebergantungan rakan sebaya dipasang secara automatik, anda mungkin perlu menulis skrip sendiri atau menukar pengurus pakej anda kepada npm yang menyokong ini bermula dari v7.
Jawapan #2
Saya juga menghadapi masalah ini dan mencuba beberapa perkara tetapi beralih kembali ke versi nodejs 18 LTS telah membantu dan kini aplikasi berjalan dengan baik.
