Pertanyaan npm melempar kesalahan tanpa sudo


Saya baru saja menginstal node dan npm melalui paket di nodejs.org dan setiap kali saya mencoba mencari atau menginstal sesuatu dengan npm, ini akan melemparkan kesalahan berikut, kecuali saya sudo perintah. Saya merasa ini masalah perizinan? Saya sudah menjadi admin.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

1017
2018-04-22 15:35


asal


Jawaban:


Ini tampak seperti masalah izin di direktori rumah Anda. Untuk merebut kembali kepemilikan .npm direktori mengeksekusi:

sudo chown -R $(whoami) ~/.npm

1864
2018-04-22 16:11



Izin yang Anda gunakan saat memasang Node akan diperlukan ketika melakukan hal-hal seperti menulis di Anda direktori npm (npm link, npm install -g, dll.).

Anda mungkin menjalankan instalasi node dengan hak akses root, itu sebabnya instalasi paket global meminta Anda untuk menjadi root.


Solusi 1: NVM

Jangan meretas dengan izin, pasang simpul dengan cara yang benar.

Pada mesin pengembangan, Anda seharusnya tidak menginstal dan menjalankan node dengan izin root, jika tidak hal-hal seperti npm link, npm install -g akan membutuhkan izin yang sama.

NVM (Node Version Manager) memungkinkan Anda untuk menginstal Node tanpa izin root dan juga memungkinkan Anda untuk menginstal banyak versi Node untuk bermain dengan mudah dengannya. Sempurna untuk pengembangan.

  1. Uninstall Node (izin root mungkin diperlukan). Ini mungkin membantu Anda.
  2. Kemudian instal NVM mengikuti instruksi di halaman ini.
  3. Instal Node melalui NVM: nvm install node

Sekarang npm link, npm install -g tidak akan lagi mengharuskan Anda menjadi root.

Sunting: Lihat juga https://docs.npmjs.com/getting-started/fixing-npm-permissions


Solusi 2: Instal paket secara global untuk pengguna tertentu

Jangan meretas dengan izin, instal paket npm secara global dengan cara yang benar.

Jika Anda menggunakan OSX atau Linux, Anda bisa buat direktori khusus pengguna untuk paket global Anda dan pengaturan npm dan node untuk mengetahui cara menemukan paket yang dipasang secara global.

Periksa artikel bagus ini untuk petunjuk langkah demi langkah menginstal modul npm secara global tanpa sudo.

Lihat juga: dokumentasi npm pada Memperbaiki izin npm.


482
2018-06-25 09:05



Anda juga akan membutuhkan izin menulis node_modules direktori:

sudo chown -R $USER /usr/local/lib/node_modules

386
2017-08-24 03:23



Saya menemukan ini ketika menginstal Recess (https://github.com/twitter/recess) untuk mengkompilasi CSS saya untuk Bootstrap 3.

Saat memasang reses:

-npm install recess -g
  1. Anda perlu membuka kunci izin di Anda home direktori, seperti Noah mengatakan:

    sudo chown -R `whoami` ~/.npm
    
  2. Anda juga perlu menulis izin ke node_modules direktori, seperti Xilo mengatakan, jadi jika masih tidak berfungsi, coba:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Jika Anda masih melihat kesalahan, Anda mungkin juga perlu benar /usr/local perizinan:

    sudo chown -R `whoami` /usr/local
    

Harap dicatat bahwa sebagaimana ditunjukkan dalam posting ini  /usr/local/ sebenarnya bukan dir sistem jika Anda menggunakan Mac, jadi, jawaban ini benar-benar "aman" bagi pengguna Mac. Namun, jika Anda berada di Linux, lihat Christopher WillJawabannya di bawah ini untuk solusi ramah lingkungan, sistem yang aman (tetapi lebih kompleks).


57
2017-10-03 23:16



Mengubah pemilik pada folder "sistem-global" adalah peretasan. Pada instalasi baru, saya akan mengonfigurasi NPM untuk menggunakan lokasi yang sudah bisa ditulis untuk program "pengguna-global":

npm config set prefix ~/npm

Kemudian pastikan Anda menambahkan folder itu ke jalur Anda:

export PATH="$PATH:$HOME/npm/bin"

Lihat @ErikAndreas' menjawab untuk Modul NPM tidak akan dipasang secara global tanpa sudo  dan panduan langkah demi langkah yang lebih panjang oleh @sindresorhus dengan set juga $MANPATH.


49
2018-05-27 12:36



Jawaban lain menyarankan untuk mengubah kepemilikan atau izin dari direktori sistem ke pengguna tertentu. Saya sangat tidak bisa melakukannya, ini bisa menjadi sangat canggung dan bisa mengacaukan seluruh sistem!

Berikut ini adalah pendekatan yang lebih umum dan lebih aman yang mendukung multi-pengguna juga.

Buat grup baru untuk pengguna-simpul dan tambahkan pengguna yang diperlukan ke grup ini. Kemudian atur kepemilikan file / direktori yang bergantung-node ke grup ini.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Sekarang Anda dapat dengan mudah menginstal modul Anda sebagai pengguna

npm install -g generator-angular

Beberapa modul (grunt, bower, yo, dll.) Masih perlu diinstal sebagai root. Ini karena mereka membuat symlink di / user / bin /.

Edit

3 tahun kemudian saya akan merekomendasikan untuk menggunakannya Pengelola Versi Node. Itu memberi Anda banyak waktu dan masalah.


35
2018-01-09 11:58



Itu dokumentasi resmi tentang cara memperbaikinya npm install perizinan dengan EACCES kesalahan terletak di https://docs.npmjs.com/getting-started/fixing-npm-permissions.

Saya mengalami masalah ini setelah instalasi node baru menggunakan .pkg installer di OSX. Ada beberapa jawaban yang bagus di sini, tetapi saya belum melihat tautan ke npmjs.com.

Opsi 1: Ubah izin ke direktori default npm

  1. Temukan jalur ke direktori npm:

    npm config get prefix
    

Untuk banyak sistem, ini akan menjadi / usr / local.

PERINGATAN: Jika jalur yang ditampilkan hanya / usr, beralih ke pilihan 2.

  1. Ubah pemilik direktori npm menjadi nama pengguna saat ini (nama pengguna Anda!):

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
    

    Ini mengubah izin dari sub-folder yang digunakan oleh npm dan beberapa alat lainnya (lib / node_modules, tempat sampah, dan Bagikan).

Opsi 2: Ubah direktori default npm ke direktori lain

Ada kalanya Anda tidak ingin mengubah kepemilikan direktori default yang digunakan npm (mis. / usr) karena ini dapat menyebabkan beberapa masalah, misalnya jika Anda berbagi sistem dengan pengguna lain.

Sebagai gantinya, Anda dapat mengkonfigurasi npm untuk menggunakan direktori yang berbeda sama sekali. Dalam kasus kami, ini akan menjadi direktori tersembunyi di folder rumah kami.

  1. Buat direktori untuk instalasi global:

    mkdir ~/.npm-global
    
  2. Konfigurasikan npm untuk menggunakan jalur direktori baru:

    npm config set prefix '~/.npm-global'
    
  3. Buka atau buat file ~ / .profile dan tambahkan baris ini:

    export PATH=~/.npm-global/bin:$PATH
    
  4. Kembali pada baris perintah, perbarui variabel sistem Anda:

    source ~/.profile
    

11
2018-01-23 19:46



Awas!!!  Awas!!!  Awas!!! 

chown atau chmod adalah TIDAK solusinya, karena risiko keamanan.

Sebagai gantinya lakukan ini, lakukan:

Cek pertama, di mana npm mengarah ke, jika Anda memanggil:

npm config get prefix

Jika / usr dikembalikan, Anda dapat melakukan hal berikut:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

Ini membuat npm-Direktory di Home-Directory Anda dan arahkan npm ke sana.

Agar perubahan ini permanen, Anda harus menambahkan perintah ekspor ke .bashrc Anda:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc

11
2017-12-30 11:18



Seolah-olah kita butuh lebih banyak jawaban di sini, tapi bagaimanapun ..

Sindre Sorus memiliki panduan Instal paket npm secara global tanpa sudo di OS X dan Linux menguraikan cara memasang dengan bersih tanpa mengotak-atik izin:

Berikut ini cara memasang paket secara global untuk pengguna tertentu.

  1. Buat direktori untuk paket global Anda

    mkdir "${HOME}/.npm-packages"
    
  2. Referensi direktori ini untuk penggunaan selanjutnya di .bashrc / .zshrc Anda:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. Tunjukkan pada npm tempat menyimpan paket yang dipasang secara global. Di dalam Anda $HOME/.npmrc tambah file:

    prefix=${HOME}/.npm-packages
    
  4. Pastikan simpul akan menemukannya. Tambahkan yang berikut ini ke .bashrc / .zshrc Anda:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Pastikan Anda akan menemukan binari dan halaman manual terinstal. Tambahkan yang berikut ini ke Anda .bashrc/.zshrc:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

Periksa npm-g_nosudo untuk melakukan langkah-langkah di atas secara otomatis

Checkout sumber panduan ini untuk pembaruan terkini.


10
2018-01-20 09:35



Ketika Anda menjalankan npm install -g somepackage, Anda mungkin mendapatkan kesalahan EACCES yang meminta Anda menjalankan kembali perintah sebagai root / Administrator. Ini masalah perizinan.

Nya mudah diperbaiki, buka terminal Anda (Aplikasi> Utilitas> Terminal)

sudo chown -R $USER /usr/local/lib/node_modules

** Saya sangat menyarankan Anda untuk tidak menggunakan manajemen paket dengan sudo (sudo npm -g menginstal sesuatu), karena Anda bisa mendapatkan beberapa masalah nanti **

Referensi: http://foohack.com/2010/08/intro-to-npm/


8
2017-10-20 07:22