Saya baru saja menginstal node dan npm melalui paket di nodejs.org dan setiap kali saya mencoba mencari atau menginstal sesuatu dengan npm ia melempar kesalahan berikut, kecuali saya sudo perintah. Saya merasa ini adalah masalah izin? 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
sudo chown
: github.com/sindresorhus/guides/blob/master/…Jawaban:
Ini terlihat seperti masalah izin di direktori rumah Anda. Untuk mendapatkan kembali kepemilikan dari direktori .npm , jalankan:
sumber
whoami
adalah placeholder, tetapi bekerja diketik secara harfiah apa adanya, jadi itu harus variabel yang saya tidak mengerti.whoami
memastikan bahwa itu dijalankan dengan benar dan kemudian ditempatkan ke dalam perintah chownsudo chown -R simpleascouldbe ~/.npm
Izin yang Anda gunakan saat memasang Node akan diperlukan saat melakukan hal-hal seperti menulis di direktori NPM (
npm link
,npm install -g
, dll).Anda mungkin menjalankan instalasi node dengan izin root, itu sebabnya instalasi paket global meminta Anda untuk menjadi root.
Solusi 1: NVM
Pada mesin pengembangan, Anda tidak boleh 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 dengan mereka .. Sempurna untuk pengembangan.
nvm install node
Sekarang
npm link
,npm install -g
tidak lagi mengharuskan Anda untuk menjadi root.Sunting: Lihat juga https://docs.npmjs.com/getting-started/fixing-npm-permissions
Solusi 2: Instal paket secara global untuk pengguna tertentu
Jika Anda menggunakan OSX atau Linux, Anda dapat membuat direktori khusus pengguna untuk paket dan pengaturan global Anda
npm
dannode
untuk mengetahui cara menemukan paket yang diinstal secara global.Lihatlah artikel hebat ini untuk petunjuk langkah demi langkah tentang pemasangan modul npm secara global tanpa sudo.
Lihat juga: dokumentasi npm tentang Memperbaiki izin npm .
sumber
npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm
- Saya harus menginstal ulang nodejs dan di dalam shell root dan mencopotnya, jika tidak, Anda akan terus memiliki symlink ke yo, grunt, dll…sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
stackoverflow.com/a/22290968/1449157 dan kemudian dihapusnpm
dan diinstal melaluinvm
Anda juga memerlukan izin menulis di
node_modules
direktori:sumber
~/tmp
direktori untuk saya.node_modules
di/usr/local/lib/
. wtf?Then I ran sudo chown -R $USER /* and everything was fine
- TIDAK - Anda merusak mesin Anda.Mengubah pemilik pada folder "sistem-global" adalah peretasan. Pada instalasi baru, saya akan mengkonfigurasi NPM untuk menggunakan lokasi yang sudah dapat ditulis untuk program "user-global":
Kemudian pastikan Anda menambahkan folder itu ke jalur Anda:
Lihat @ErikAndreas ' jawaban untuk modul NPM tidak akan menginstal secara global tanpa sudo dan lagi panduan langkah-demi-langkah oleh @sindresorhus dengan juga set
$MANPATH
.sumber
$HOME
maka biasanya.profile
skrip Anda akan menangani$PATH
waktu berikutnya Anda sumbernya (mis. Lain kali Anda masuk).$HOME
dan mungkin mengganggu file / subfolder NPM lainnya (yang akan datang?). Lebih suka untuk menjaga binari dari manajer paket yang berbeda / bahasa / sistem build terpisah, dan secara eksplisit mengatur$PATH
(dalam skrip waktu login) sebagai gantinya.~/lib/node_modules
, dengan CLI terkait, jika ada, di~/bin
. Bagi banyak pengguna, terutama jika mereka tidak memiliki root, keduanya~/bin
dan~/lib
sudah ada.~/bin
dan kemudian melakukan hal yang sama untuk satu atau dua manajer paket tambahan. Itu mungkin tidak terjadi hari ini atau besok, tetapi ada risiko yang jelas bahwa dua paket dari manajer yang berbeda memiliki tabrakan nama dan menimpa file masing-masing. Itu kasus yang cukup baik bagi saya untuk memiliki awalan yang terpisah. (Contoh konkret akan dihargai.)Saya mengalami ini ketika menginstal Recess ( https://github.com/twitter/recess ) untuk mengkompilasi CSS saya untuk Bootstrap 3.
Saat memasang reses:
Anda perlu membuka kunci izin di
home
direktori Anda , seperti kata Nuh :Anda juga perlu menulis izin ke
node_modules
direktori, seperti kata Xilo , jadi jika masih tidak berfungsi, coba:Jika Anda masih melihat kesalahan, Anda mungkin perlu memperbaiki
/usr/local
izin :Harap dicatat bahwa sebagaimana ditunjukkan dalam posting
/usr/local/
ini sebenarnya bukan sistem dir jika Anda menggunakan Mac, jadi, jawaban ini sebenarnya "aman" untuk pengguna Mac. Namun, jika Anda menggunakan Linux, lihat jawaban Christopher Will di bawah ini untuk solusi multi-user friendly, system dir safe (tetapi lebih kompleks).sumber
Awas!!! Awas!!! Awas!!!
chown atau chmod BUKAN solusinya, karena risiko keamanan.
Alih-alih melakukan ini, lakukan:
Cek pertama, di mana npm menunjuk ke, jika Anda menelepon:
Jika / usr dikembalikan, Anda dapat melakukan hal berikut:
Ini membuat Direktori-npm di Direktori-Rumah Anda dan titik
npm
.Agar perubahan ini permanen, Anda harus menambahkan perintah ekspor ke .bashrc Anda:
sumber
$PATH
, bukan string itu sendiri. Anda harus mengubahnya.Jawaban lain menyarankan untuk mengubah kepemilikan atau izin direktori sistem ke pengguna tertentu. Saya sangat tidak suka melakukannya, ini bisa menjadi sangat canggung dan mungkin 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 pada node ke grup ini.
Sekarang Anda dapat dengan mudah memasang modul sebagai pengguna
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 menggunakan Node Version Manager . Ini memberi Anda banyak waktu dan masalah.
sumber
staff
grup bawaan untuk memberikan izin ke folder dev saya. Juga, ide bagus untuk dijalankanchmod g+ws node_modules
untuk memastikan bahwa grup Anda memiliki izin baca / tulis./usr/lib
berada di bawah kendali manajer paket sistem Anda dan Anda tidak boleh melakukan perubahan apa pun di sana.The dokumentasi resmi tentang cara untuk memperbaiki
npm install
perizinan denganEACCES
kesalahan terletak pada https://docs.npmjs.com/getting-started/fixing-npm-permissions .Saya mengalami masalah ini setelah instalasi simpul menggunakan
.pkg
installer pada OSX. Ada beberapa jawaban yang bagus di sini, tetapi saya belum melihat tautan ke npmjs.com.Opsi 1: Ubah izin ke direktori default npm
Temukan path ke direktori npm:
Untuk banyak sistem, ini akan menjadi / usr / lokal .
PERINGATAN : Jika jalur yang ditampilkan hanya / usr , beralih ke Opsi 2 .
Ubah pemilik direktori npm menjadi nama pengguna saat ini (nama pengguna Anda!):
Ini mengubah izin sub-folder yang digunakan oleh npm dan beberapa alat lainnya ( lib / node_modules , bin , dan bagikan ).
Opsi 2: Ubah direktori default npm ke direktori lain
Ada saat-saat ketika Anda tidak ingin mengubah kepemilikan direktori default yang digunakan npm (yaitu / usr ) karena ini dapat menyebabkan beberapa masalah, misalnya jika Anda berbagi sistem dengan pengguna lain.
Sebagai gantinya, Anda dapat mengonfigurasi npm untuk menggunakan direktori yang berbeda sekaligus. Dalam kasus kami, ini akan menjadi direktori tersembunyi di folder rumah kami.
Buat direktori untuk instalasi global:
Konfigurasikan npm untuk menggunakan jalur direktori baru:
Buka atau buat file ~ / .profile dan tambahkan baris ini:
Kembali ke baris perintah, perbarui variabel sistem Anda:
sumber
/usr/bin/
? Sekarang hanya pengguna Anda yang dapat mengaksesnya. Anda masuk sebagai orang lain, masih tidak memiliki akses, karena file tersebut sebenarnya ada di direktori home pengguna lain!Seolah-olah kita membutuhkan lebih banyak jawaban di sini, tapi tetap saja ..
Sindre Sorus memiliki panduan Menginstal paket-paket npm secara global tanpa sudo pada OS X dan Linux yang menguraikan cara menginstal dengan bersih tanpa mengacaukan izin:
Periksa sumber panduan ini untuk mendapatkan pembaruan terbaru.
sumber
TL; DR
-
Saat Anda menggunakannya
npm
, unduh paket ke direktori home pengguna Anda. Ketika Anda menjalankan sebagai sudo,npm
instal file ke direktori yang sama, tetapi sekarang file tersebut dimiliki oleh root.Jadi inilah yang terjadi pada setiap orang yang pernah menggunakan
npm
:npm install foo
sudo install -g foo-cli
tanpa masalahnpm install bar
npm
desainer sekarang karena Anda harus pergichmod
direktori lagiSaat Anda menggunakan opsi
-i
atau-H
dengan sudo, direktori home Anda akan menjadiroot
direktori home. Instalasi global apa pun akan men-cache paket ke file yang/root/.npm
bukanroot
milik di/home/me/.npm
.Selalu gunakan
sudo -i
atausudo -H
ketika menjalankannpm install
untuk menginstal paket global dannpm
masalah izin Anda akan mencair.Untuk kebaikan.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
- qv jawaban yang diterima untuk memperbaiki yang sudah kacau
npm
.sumber
Saya punya masalah serupa di modul NPM tidak akan menginstal secara global tanpa sudo , masalahnya adalah ketika saya menginstal node saya melakukannya dengan sudo melalui chris / lea ppa repo .
Solusi saya adalah meng-uninstall node dan kemudian menginstalnya dengan cara ini:
Unduh sumber node stabil terbaru dari nodejs.org #dalam kasus saya node-v0.10.20.tar.gz
PD: Jika Anda tidak ingin mengubah kepemilikan folder / usr / local, Anda dapat menginstalnya di tempat yang sudah Anda miliki. Masalah dari pendekatan ini adalah bahwa Anda harus mengikat folder instalasi dengan baris perintah bash sehingga kita dapat menggunakan perintah node nanti
Dengan salah satu dari pendekatan itu, Anda dapat melakukan hal berikut tanpa menggunakan sudo
sumber
sudo chown $USER /use/local
sebelum membangun. Terlihat bagus sejauh ini, saatnya mencoba membangun atom! Terima kasih!Ketika Anda menjalankan npm install -g somepackage, Anda mungkin mendapatkan kesalahan EACCES yang meminta Anda untuk menjalankan perintah lagi sebagai root / Administrator. Ini masalah izin.
Sangat mudah untuk memperbaiki , buka terminal Anda (Aplikasi> Utilitas> Terminal)
** Saya sangat menyarankan Anda untuk tidak menggunakan manajemen paket dengan sudo (sudo npm -g instal sesuatu), karena Anda bisa mendapatkan beberapa masalah nanti **
Referensi: http://foohack.com/2010/08/intro-to-npm/
sumber
sudo chown -R `whoami` ~/.npm
,sudo chown -R `whoami` /usr/local/lib
danUntuk Mac (diadopsi dari jawaban Christoper Will)
Mac OS X 10.9.4
Preferensi Sistem> Pengguna & Grup> (membuka kunci)> tekan +:
Akun Baru>
Nama Grup "Grup" : nodegrp
Setelah membuat grup, centang pengguna untuk dimasukkan dalam grup ini
sumber
sudo
atau mengubah kepemilikan grup folder tersebut sehingga dapat dimodifikasi oleh pengguna normal? Jika pengguna normal tidak seharusnya melakukan tindakan apa pun pada folder ini maka tentu saja tidak boleh mengubah kepemilikan grup folder tersebut.-H
flag. Secara khusussudo -H npm install -g <pkg>
,. Ini memastikan penggambaran izin yang tepat untuk folder sistem dan pengguna. Apa yang tidak ingin Anda lakukan adalah menggunakansudo npm install -g
, karena ini menginstal file yang dimiliki root ke direktori pengguna Anda. Akan lebih bagus jika npm cukup pintar untuk melakukan ini dengan cara yang benar, tetapi tidak, jadi Anda harus menggunakan-H
flag sudo untuk menginstal dengan benar secara global.Dalam kasus saya, itu karena izin ~ / tmp. Jadi saya lakukan:
Dan tidak apa-apa!
sumber
Bagi saya, jalankan saja
tidak bekerja Lalu, saya mengeksekusi juga
Dan semuanya bekerja dengan baik!
sumber
/usr/lib
adalah file sistem dan tidak boleh dimiliki oleh akun pengguna pribadi Anda.ISU : Anda (pengguna) tidak memiliki set izin yang tepat untuk direktori.
Jalan keluar instan adalah menjalankan instalasi npm menggunakan sudo, tetapi ini dapat memberi Anda kesalahan yang sama, atau instalasi yang tidak tepat.
DAN mengubah kepemilikan direktori bukanlah pilihan yang baik, tambalan sementara.
Solusi / Saran : Ubah Direktori Default npm (dari dokumen resmi )
Cadangkan komputer Anda sebelum melanjutkan.
(opsional) Jika Anda memiliki instalasi yang salah, copot dulu:
Buat direktori untuk instalasi global:
mkdir ~/.npm-global
Konfigurasikan npm untuk menggunakan jalur direktori baru:
npm config set prefix '~/.npm-global'
Buka atau buat file
~/.profile
atau~/.bash_profile
dan tambahkan baris ini:export PATH=~/.npm-global/bin:$PATH
Kembali ke baris perintah, perbarui variabel sistem Anda, atau restart terminal:
source ~/.profile
(opsional) Uji: Unduh paket secara global tanpa menggunakan sudo.
npm install -g jshint
sumber
Dalam hal
sudo chown -R $(whoami) ~/.npm
tidak bekerja untuk Anda, atau Anda memerlukan solusi perintah non terminal.Masalahnya adalah bahwa akun pengguna Anda tidak memiliki izin menulis ke folder node_modules, sehingga Anda dapat melakukan hal berikut
Buka pencari dan tekan
cmd
+shift
+g
ini akan membuka buka folder dengan urlTulis jalur berikut
/usr/local/lib/node_modules
dan tekan goKlik kanan pada
node_modules
folder dan pilihGet Info
Gulir ke bawah ke
sharing & permissions
bagianBuka kunci untuk dapat melakukan perubahan.
Tekan
+
dan tambahkan akun pengguna AndaPastikan Anda memilih
Read & Write
drop down privilegeSekarang Anda harus dapat menginstal paket tanpa
sudo
dan masalah izin harus diselesaikansumber
Masalah: Anda tidak memiliki izin untuk menulis ke direktori yang digunakan npm untuk menyimpan paket dan perintah global.
Solusi: Izinkan izin untuk npm.
Buka terminal:
Masukkan perintah ini:
Solusi ini memungkinkan izin untuk HANYA direktori yang diperlukan, menjaga direktori lain tetap bagus dan aman.
sumber
npm config get prefix
mengembalikan sesuatu di folder rumah, solusi ini akan memperbaiki izin, tetapi tidak mengatasi masalah mendasar menginstal paket global dengan cara yang aman untuk lingkungan bersama.Perbaikan hebat lainnya di sini untuk mengkonfigurasi NPM dengan benar, jalankan perintah berikut:
sumber
Anda bisa mencoba ini, berfungsi di ubuntu dan mac
sumber
Apa yang bagi saya sepertinya pilihan terbaik adalah yang disarankan dalam dokumentasi npm , yang pertama memeriksa di mana global node_modules diinstal secara default dengan menjalankan
npm config get prefix
. Jika Anda mendapatkan, seperti yang saya lakukan pada Trusty,/usr
Anda mungkin ingin mengubahnya ke folder yang dapat Anda miliki dengan aman tanpa mengacaukan segalanya seperti yang saya lakukan.Untuk melakukannya, pilih atau buat folder baru di sistem Anda. Anda mungkin ingin memilikinya di direktori home Anda atau, seperti saya, di bawah
/usr/local
untuk konsistensi karena saya juga pengguna Mac (saya lebih suka tidak perlu melihat ke tempat yang berbeda tergantung pada mesin yang kebetulan saya berada di depan). Alasan lain yang baik untuk melakukan itu adalah kenyataan bahwa/usr/local
folder tersebut mungkin sudah ada di PATH Anda (kecuali jika Anda ingin dipusingkan dengan PATH Anda) tetapi kemungkinan folder Anda yang baru dibuat tidak dan Anda harus menambahkannya ke PATH diri Anda di file .bash-profil atau .bashrc Anda .Singkatnya, saya mengubah lokasi default dari modul global dengan
npm config set prefix '/usr/local'
, membuat folder/usr/local/lib/node_modules
(akan digunakan oleh npm) dan mengubah izin untuk folder yang digunakan oleh npm dengan perintah:Sekarang Anda dapat menginstal modul apa pun secara global dengan aman. Semoga ini membantu!
sumber
Inilah cara saya memecahkan masalah pada Windows 8.1:
sumber
Solusi terbaik adalah ini yang disediakan oleh dokumentasi npm.
Untuk Ubuntu solusi yang disarankan adalah Opsi # 2
Langkah singkat:
Buat direktori untuk instalasi global:
mkdir ~/.npm-global
Konfigurasikan npm untuk menggunakan jalur direktori baru: dapat membantu Anda memverifikasi apakah awalan telah diperbarui atau tidak. Hasilnya adalah <Direktori Beranda Anda> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix
Buka atau buat file ~ / .profile dan tambahkan baris ini:
export PATH=~/.npm-global/bin:$PATH
Kembali ke baris perintah, perbarui variabel sistem Anda:
source ~/.profile
Alih-alih langkah 2-4 Anda juga dapat menggunakan variabel ENV yang sesuai (mis. Jika Anda tidak ingin memodifikasi ~ / .profile):
NPM_CONFIG_PREFIX=~/.npm-global
Untuk Mac solusi yang disarankan adalah Opsi # 3
Pada Mac OS Anda dapat menghindari masalah ini sama sekali dengan menggunakan manajer paket Homebrew
brew install node
sumber
Saya mengatasinya dengan mengubah pemilik dari root ke nama pengguna saya
sudo chown -R me:me /home/me/.config/configstore/
ubah saya dengan nama pengguna dan grup Anda.
sumber
Saya suka menggunakan grup ubuntu untuk mencapai ini alih-alih mengubah pemilik. Cukup sederhana.
Pertama instal nodejs dan npm menggunakan apt-get
sudo apt-get update && sudo apt-get install nodejs npm
Cari tahu siapa yang masuk yaitu nama pengguna, jalankan perintah berikut untuk melihatnya di terminal
whoami
Anda dapat melihat daftar grup yang ditugaskan dengan menggunakan perintah yang sangat sederhana, biasanya grup pertama adalah nama pengguna Anda sendiri
groups
Jalankan berikut untuk memungkinkan akses ke pengguna yang masuk
sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local
Perbarui npm dan nodejs
npm install -g npm
Anda diatur, pengguna Anda dapat menjalankan perintah npm tanpa sudo
Anda juga dapat merujuk ke tautan ini https://askubuntu.com/a/1115373/687804
sumber
Pada Mac OS X, ketika menginstal dengan Homebrew
brew install npm
, jalur instalasinya ada/usr/local/share/npm/
pada keduanyabin/
danlib/node_modules/
subfolder.Menjalankan perintah ini untuk mengubah ke pemilik ke pengguna Anda yang saat ini login harus memperbaikinya semuanya, dan memungkinkan Anda untuk menginstal paket NPM global tanpa
sudo
.osx homebrew
sumber
npm config
.Sebenarnya, saya juga mengalami masalah yang sama. Saya menjalankan Ubuntu. Masalah saya muncul karena saya kehilangan kunci publik Ubuntu. Bahkan memperbarui sistem saya tidak terjadi. Itu memberi kesalahan GPG. Dalam hal ini, Anda bisa mendapatkan kembali kunci Anda dengan menggunakan perintah ini:
Setelah itu npm berfungsi dengan baik!
sumber
John Papa menunjuk ke sejarah dan alasan di balik masalah ini dan memberikan perbaikan yang solid :
Langkah-langkah John Papa adalah:
Semoga ini bisa membantu yang penasaran!
sumber
Ini adalah solusi yang saya manfaatkan dan kerjakan. Saya mencoba menggunakan
whoami
tidak pernah berhasil.sudo chown -R $USER /usr/local/lib/node_modules
kemudian
sudo chown -R $USER /usr/local/bin/npm
kemudian
sudo chown -R $USER /usr/local/bin/node
sumber
Jawaban Yves M. sangat mirip dengan solusi saya. Berikut adalah perintah yang saya gunakan, yang sedikit berbeda dari perintahnya.
Kemudian permintaan untuk versi terbaru:
Kemudian instal versi terbaru:
contoh
sumber