Penginstalan NPM gagal dengan “tidak dapat berjalan di Windows”

153

Saya mencoba untuk mengatur lingkungan simpul saya pada contoh Ubuntu 12.04 baru, dengan Node 0.8.14 sudah diinstal, tetapi saya mengalami masalah ketika saya mencoba untuk menjalankan npm install. Jadi ketika saya mencoba npm install, dikatakan bahwa saya perlu menjalankannya sebagai root atau administrator:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Tetapi ketika mencoba menjalankannya sebagai sudo, dikatakan sebagai berikut:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

Di package.json saya, ini berisi skrip berikut:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Sisa dependensi lainnya valid karena saya telah menginstalnya dengan benar di komputer saya sendiri (Mac) Apakah ada yang tahu mengapa ini terjadi?

EH
sumber

Jawaban:

231

The dokumentasi mengatakan (juga di sini ):

Jika npm dipanggil dengan hak akses root, maka itu akan mengubah uid ke akun pengguna atau uid yang ditentukan oleh userkonfigurasi, yang defaultnya adalah nobody. Atur unsafe-permbendera untuk menjalankan skrip dengan hak akses root.

Pilihan Anda adalah:

  1. Jalankan npm installdengan --unsafe-permbendera:

    [sudo] npm install --unsafe-perm
  2. Tambahkan unsafe-permbendera ke package.json:

    "config": {
        "unsafe-perm":true
    }
  3. Jangan gunakan preinstallskrip untuk menginstal modul global, instal secara terpisah dan kemudian jalankan regular npm installtanpa hak akses root:

    sudo npm install -g coffee-script node-gyp
    npm install

Terkait :

Dmitry Pashkevich
sumber
2
Maaf saya tidak melihat ini sampai sekarang. Saya mencoba "perm-unsafe" sebelumnya tetapi tidak berhasil juga. Masalahnya masih ada
EH
10
Ini bekerja untuk saya sudo npm install --unsafe-permsudo npm install"unsafe-perm":true
:,
8
Menambahkannya ke properti "config" di package.json sebenarnya menyetel "npm_package_config_unsafe_perm" sehingga opsi 2 tidak berfungsi. Lihat: stackoverflow.com/questions/28763958/…
justmoon
'tidak aman-perm': benar juga gagal bagi saya. Malu itu tidak memberikan kesalahan dan konteks (termasuk perubahannya) dalam pesan kesalahan, bukannya mematikan penyebabnya dari keberadaan dan memberikan sesuatu yang samar, mengejutkan, dan bermusuhan.
android.weasel
Sementara npm install --unsafe-permbekerja untuk saya, saya mencoba mengikuti implikasi tentang mengubah userkonfigurasi default . Jadi saya lakukan npm set user my_userdan npm set group my_group, yang menambahkan entri yang sesuai dalam .npmrcfile pengguna root . Tetapi masalahnya adalah node_modulesfolder itu sendiri dan subfoldernya masih dimiliki oleh root, jadi itu tidak membantu. Saya tidak bisa menemukan cara agar mereka tidak dimiliki oleh root.
fulv
53

Satu-satunya hal yang berhasil bagi saya adalah menambahkan .npmrcfile yang berisi:

unsafe-perm = true

Menambahkan konfigurasi yang sama ke package.jsontidak berpengaruh.

Gangguan
sumber
36
di buruh pelabuhan:RUN npm set unsafe-perm true
Alexander Mills
jika Anda menggunakan WSL cukup ketik atur tidak aman-perm benar. Ini akan membantu Anda
Stas Panyukov
26

Saya telah mengalami masalah yang sama ketika mencoba untuk mempublikasikan aplikasi nodejs saya di server pribadi yang menjalankan CentOs menggunakan pengguna root. Kesalahan yang sama dipecat oleh "postinstall": "./node_modules/bower/bin/bower install" di file package.json saya jadi satu-satunya solusi yang berfungsi untuk saya adalah menggunakan kedua opsi untuk menghindari kesalahan:

1: gunakan opsi --allow-root untuk perintah install bower

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: gunakan opsi --unsafe-perm untuk perintah install npm

npm install --unsafe-perm
Yassine Khachlek
sumber
12

OP di sini, saya telah belajar lebih banyak tentang simpul sejak saya pertama kali mengajukan pertanyaan ini. Meskipun jawaban Dmitry sangat membantu, yang akhirnya berhasil bagi saya adalah menginstal node dengan izin yang benar.

Saya sangat merekomendasikan untuk tidak menginstal node menggunakan manajer paket apa pun, tetapi untuk mengkompilasinya sendiri sehingga berada di direktori lokal dengan izin normal.

Artikel ini memberikan instruksi langkah-demi-langkah yang sangat jelas tentang cara melakukannya:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04

EH
sumber
2

Saya memperbaikinya dengan mengubah kepemilikan /usr/localdan ~/Users/user-namesuka:

sudo chown -R my_name /usr/local

Ini memungkinkan saya untuk melakukan semuanya tanpa sudo

Daniel O'Leary
sumber