npm sudo olmadan hata veriyor


1286

Ben sadece nodejs.org paket üzerinden düğüm ve npm yüklü ve ne zaman arama veya npm ile bir şey yüklemeye çalıştığınızda komutu sudo sürece aşağıdaki hata atar. Bunun bir izin sorunu olduğunu düşünüyor musun? Ben zaten yöneticiyim.

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

35
Lütfen NVM'yi kullanarak çözümü göz önünde bulundurun : stackoverflow.com/a/24404451/1480391 (izinlerle hacklemek yerine)
Yves M.

2
@janaspage NPM (Düğüm Paketi Yöneticisi) aracılığıyla düğümü veya NVM'yi (Düğüm Sürümü Yöneticisi) yükleyemezsiniz , bu mantıklı değildir. NPM düğüm içinde gelir (aynı anda kurulur). Wikipedia sayfasına bir göz atın: en.wikipedia.org/wiki/Npm_(software)
Yves M.

5
Sonunda daha iyi bir çözüm sudo chown: github.com/sindresorhus/guides/blob/master/…
Dmitri Zaitsev

OSX altında ve 0official pkg intaller ile kurulum düğümü altında bu çözüm işe yaramadı. Bunun yerine bunu kullandım: stackoverflow.com/a/34968008/675565
fmquaglia

2
Sorunu ve düzeltmeyi açıklıyor: docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

Yanıtlar:


2268

Bu, ana dizininizde bir izin sorunu gibi görünüyor. .Npm dizininin sahipliğini geri almak için:

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

102
Bunun whoamibir yer tutucu olduğunu düşündüm , ancak tam olarak olduğu gibi yazıldığından işe yaramadığım bir değişken olmalı.
SimplGy

127
whoami gerçek bir kabuk komutudur en.wikipedia.org/wiki/Whoami . Etraftaki backticks whoamidoğru bir şekilde yürütülmesini ve daha sonra chown komuta yerleştirilmesini sağlar
Noah

13
kullanıcı adınızı manuel olarak da belirtebilirsiniz. Kullanıcı adınız "simpleascouldbe" ise, komut şu olacaktırsudo chown -R simpleascouldbe ~/.npm
Noah

13
npm gerektirmez ve sudo kullanmamalısınız - aşağıdaki cevap @HeberLZ özellikle 2. seçeneğiyle ilgili: ./configure --prefix = xxxxxx
Scott Stensland

9
@ChristopherWill: Bu, bir sistem dizininin sahipliğini değiştirmez. Bu, kullanıcının ana dizinindeki, kullanıcının sahip olması gereken dizinlerin sahipliğini değiştirmektedir .
user4815162342

619

Senin yazma gibi şeyleri yaparken yükleme Düğüm gerekli olacak zaman İzinler kullandığınız npm dizine ( npm link, npm install -gvb.)

Büyük olasılıkla düğüm yüklemesini kök izinleriyle çalıştırdınız, bu nedenle genel paket yüklemesi sizden kök olmanızı istiyor.


Çözüm 1: NVM

İzinleri hacklemeyin, düğümü doğru şekilde kurun.

Bir gelişme makinede, aksi takdirde işler gibi, kurun ve kök izinleriyle düğümünü çalıştırmak gerekir npm link, npm install -gaynı izinleri gerekir.

NVM (Düğüm Sürümü Yöneticisi), Kök izinleri olmadan Düğüm yüklemenize izin verir ve ayrıca onlarla kolayca oynamak için Düğümün birçok sürümünü yüklemenizi sağlar .. Geliştirme için mükemmeldir.

  1. Düğümü Kaldır (muhtemelen kök izni gerekli olacaktır). Bu size yardımcı olabilir.
  2. Ardından , bu sayfadaki talimatları izleyerek NVM'yi yükleyin .
  3. Düğümü NVM ile Kur: nvm install node

Şimdi npm link, npm install -gartık kök olmanızı gerektirir.

Düzenleme: Ayrıca bkz. Https://docs.npmjs.com/getting-started/fixing-npm-permissions


Çözüm 2: Belirli bir kullanıcı için paketleri global olarak yükleyin

İzinleri hacklemeyin, npm paketlerini global olarak doğru şekilde kurun.

Eğer OSX veya Linux üzerinde iseniz, olabilir global paket için bir kullanıcı özel dizini oluşturmak ve kurulum npmve nodeküresel yüklü paketler bulmak için nasıl bilmek.

Check out bu büyük yazı global sudo olmadan npm modülleri yükleme hakkında adım adım talimatlar için.

Ayrıca bkz: npm'nin npm izinlerini düzeltme hakkındaki belgeleri .


32
Burada yayınlanan tüm çözümler arasında NVM çözümü benim için en iyi sonuçları verdi. İzinlerle oynamak yerine NVM kullanmanızı şiddetle tavsiye ederiz.
wenincode

9
Bu talimatlar çok iyi çalıştı. Ancak muhtemelen düğümleri kaldırmadan önce sudo ile yüklediğiniz modülleri kaldırmak isteyeceksiniz : npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm- Düğümleri ve kök kabuğuna yeniden yüklemem ve kaldırmam gerekiyordu, aksi takdirde yo, grunt, vb.
Bruno Flávio

4
Bu en iyi çözüm, önce sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157 yaparak tüm modülleri kaldırdım npmve daha sonra kaldırıp yükledimnvm
Fabio Antunes

3
Düğüm için kaldırma talimatları için bu SO yanıtını kullanın stackoverflow.com/a/11178106/480031
seangates

3
Bir üretim makinesine düğüm kurmak için root kullanmak neden uygun?
Bruno Peres

401

Ayrıca node_modulesdizinde yazma iznine ihtiyacınız olacak :

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

7
~/tmpBenim için de dizin.
bilinenasilya

122
Bunun neden hala oy aldığını bilmiyorum. Sistem dizinlerinin sahipliğini belirli bir kullanıcıya değiştirmek çok kötü bir uygulamadır! Diğer çözümler için lütfen aşağıdaki cevaba bakın (düğüm kullanıcıları için ayrı bir grup oluşturmak gibi).
Christopher Will

1
bende yok node_modulesiçinde /usr/local/lib/. o ne lan?
Connor Leech

27
Ne yaparsanız yapın - KESİNLİKLE / usr / local / lib veya / usr / lib / üzerinde 'sudo chmod -R whoami' çalıştırmayın, sudoers dosyanızı bozacaksınız ve kendinizden nefret edeceksiniz.
qodeninja

7
Herkes, lütfen bunu küçümseyin ... Then I ran sudo chown -R $USER /* and everything was fine- HAYIR - makinenizi mahvediyorsunuz.
commonpike

75

"Sistem-global" klasörlerde sahibini değiştirmek bir hack'tir. Yeni bir kurulumda, NPM'yi "global kullanıcı" programları için zaten yazılabilir bir konum kullanacak şekilde yapılandıracağım :

npm config set prefix ~/npm

Ardından bu klasörü yolunuza eklediğinizden emin olun:

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

Bkz @ErikAndreas ' cevabı için NPM modüllerinin sudo olmadan küresel yüklenmez ve daha uzun adım adım kılavuz ile @sindresorhus da setleriyle $MANPATH.


Ben senin sadece önek ayarlarsanız öneririm hariç şiddetle katılıyorum $HOMEsonra genellikle .profilekomut ilgilenir $PATH(örneğin bir dahaki sefere giriş) bunu kaynak dahaki sefere.
Jess Austin

@JessAustin: Belki, ama aynı zamanda sizin daha fazla karmaşa getirecek $HOMEve diğer (gelecekteki?) NPM dosyalarına / alt klasörlerine müdahale edebilir. Farklı paket yöneticilerinden / dillerden / derleme sistemlerinden gelen ikili dosyaları ayrı tutmayı ve $PATHbunun yerine (oturum açma zamanı komut dosyasında) açıkça ayarlamayı tercih edin.
Joel Purra

Eh, dağınıklık? Sadece ~/lib/node_modulesvarsa, içinde takılı CLI'ları ile birlikte küresel olarak kurulmuş modüller hakkında konuşuyoruz ~/bin. Onlar kökü var, hem yok özellikle birçok kullanıcı için, ~/binve ~/libzaten var.
Jess Austin

@JessAustin: Bu aynı zamanda kütüphaneler ve ikili dosyalar için bir isim çarpışması meselesi. Diyelim ki, NPM'yi ikili dosyaları yerleştirmeye yönlendiriyorsunuz ~/binve sonra da bir veya iki ek paket yöneticisi için aynısını yapıyorsunuz. Bugün veya yarın olmayabilir, ancak farklı yöneticilerden iki paketin bir isim çarpışması olması ve birbirlerinin dosyalarının üzerine yazılması riski açıktır. Bu benim ayrı öneklere sahip olmak için yeterince iyi bir durum. (Somut örnekler takdir edilecektir.)
Joel Purra

1
Bu en iyi cevap olarak kabul edilmelidir. Sistem genel klasörlerini değiştirmek tehlikeli olabilir.
Vladimir Marton

58

Bootstrap 3 için CSS'mi derlemek üzere Recess ( https://github.com/twitter/recess ) yüklerken bunu gördüm.

Girintiyi kurarken:

-npm install recess -g
  1. Noah'ın söylediği homegibi dizininizdeki izinlerin kilidini açmanız gerekiyor :

    sudo chown -R `whoami` ~/.npm
  2. node_modulesDizine Xilo'nun dediği gibi yazma izinlerine de ihtiyacınız var , bu yüzden hala çalışmıyorsa şunu deneyin:

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. Hala hata görüyorsanız, izinleri de düzeltmeniz/usr/local gerekebilir :

    sudo chown -R `whoami` /usr/local

Belirtildiği gibi lütfen unutmayın bu yazı /usr/local/ bir Mac'e ise bir sistem dir aslında değil, yani bu cevap aslında Mac kullanıcıları için mükemmel "güvenli" dir. Bununla birlikte, Linux kullanıyorsanız, çok kullanıcı dostu, sistem güvenliği açısından güvenli (ancak daha karmaşık) bir çözüm için Christopher Will'in aşağıdaki cevabına bakın.


35
Bu kötü bir fikir. Muhtemelen sistem dizinlerinin belirli bir kullanıcıya ait olmasını istemezsiniz. Ciddi güvenlik endişelerinin yanı sıra, bu çok kullanıcılı uyumlu da değildir.
Christopher

2
Evet, özellikle de node.js'yi zaten yüklediyseniz ve sallanmaya devam etmeniz gerekiyorsa, +2 geliştirme ortamı için harika bir çözüm!
elliotrock

Ana dizininiz dışında gerçekten paket sahibi olmamalısınız
Ben

1
Ana klasörünüzde değilse, aksine iddialara rağmen bir sistem dizinidir. OS X tarafından kullanılmaması, bir sistem dizini olmadığı anlamına gelmez.
zengin hatırlatıcı

53

Dikkat et!!! Dikkat et!!! Dikkat et!!!

chown veya chmod, güvenlik riski nedeniyle çözüm DEĞİLDİR .

Bunun yerine şunu yapın:

İlk olarak, npm'nin işaret ettiği yeri arayın,

npm config get prefix

/ Usr döndürülürse, aşağıdakileri yapabilirsiniz:

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

Bu, Ev Dizininizde bir npm-Dizini oluşturur ve işaret npmeder.

Bu değişiklikleri kalıcı hale getirmek için .bashrc'nize export-komutunu eklemeniz gerekir:

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

/ usr varsa yalnızca seçenek 2'ye geçmeli miyim?
Albert Laure

3
Son komutun $PATH, dizenin kendisini değil, içeriğini çıkardığını unutmayın . Bunu değiştirmelisin.
Veluria

1
Bu düzeltildi! Teşekkür ederim. 'İzin reddedildi, bağlantıyı
kaldırdım

1
Bu en iyi cevap. Sorunu çözmenin önerilen yolu budur.
Paulo Coghi - Monica'yı

Chowning neden bir güvenlik riski oluşturuyor?
Frank

40

Diğer yanıtlar, sistem dizinlerinin sahipliklerini veya izinlerini belirli bir kullanıcıya değiştirmenizi önerir. Bunu yapmaktan çok dezavantajlıyım, bu çok garip hale gelebilir ve tüm sistemi kirletebilir!

İşte çok kullanıcıyı destekleyen daha genel ve daha güvenli bir yaklaşım.

Düğüm kullanıcıları için yeni bir grup oluşturun ve gerekli kullanıcıları bu gruba ekleyin. Ardından, bu gruba düğüm bağımlı dosyaların / dizinlerin sahipliğini ayarlayın.

# 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.)

Artık modüllerinizi kullanıcı olarak kolayca kurabilirsiniz

npm install -g generator-angular

Bazı modüllerin (homurdanma, bower, yo vb.) Hala kök olarak kurulması gerekir. Bunun nedeni, / user / bin / dizininde sembolik bağlantılar oluşturmalarıdır.

Düzenle

3 yıl sonra Düğüm Sürümü Yöneticisi'ni kullanmanızı öneririm . Bu size çok zaman ve sorundan tasarruf sağlar.


2
Düğüm kaynaklar tarafından kurulursa, çok kullanıcılı bir sorun olsa da, tüm modüller sudo kullanılmadan mükemmel çalışır. Bu da çok önemlidir, çünkü yeoman modülü söz konusu olduğunda, insanlar sudo yürütülmesine izin vermediği için yeoman uygulamasını sudoing yoluyla jeneratörleri güncelleyemezler :(
HeberLZ

1
Linux'ta, geliştirici staffklasörleri için izin vermek üzere genellikle yerleşik grubu kullanırım. Ayrıca, chmod g+ws node_modulesgrubunuzun okuma / yazma iznine sahip olduğundan emin olmak için çalıştırmak iyi bir fikirdir .
jackvsworld

@jackvsworld Personel grubunun farkında değildim. Sanırım bu daha akıcı bir çözüm olurdu, çünkü yeni bir hayali grup yaratmak zorunda değil. Ama bu girdi için teşekkürler.
Christopher Will

Genel olarak, /usr/libsistem paketi yöneticinizin kontrolü altındadır ve orada herhangi bir değişiklik yapmamalısınız.
zengin hatırlatıcı

23

Resmi belgeler nasıl giderileceği ile ilgili npm installbir ile izinleri EACCEShatası bulunmaktadır https://docs.npmjs.com/getting-started/fixing-npm-permissions .

.pkgOSX yükleyicisini kullanarak yeni bir düğüm yüklemesinden sonra bu sorunla karşılaştım . Burada bazı harika cevaplar var, ama henüz npmjs.com için bir bağlantı görmedim.

Seçenek 1: İzni npm'in varsayılan dizinine değiştirin

  1. Npm dizinine giden yolu bulun:

    npm config get prefix

Birçok sistem için bu / usr / local olacaktır .

UYARI : Görüntülenen yol sadece / usr ise , Seçenek 2'ye geçin .

  1. Npm dizinlerinin sahibini geçerli kullanıcının adıyla değiştirin (kullanıcı adınız!):

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

    Bu, npm ve diğer bazı araçlar ( lib / node_modules , bin ve share ) tarafından kullanılan alt klasörlerin izinlerini değiştirir .

2. Seçenek: npm'nin varsayılan dizinini başka bir dizine değiştirin

Npm'in kullandığı varsayılan dizinin sahipliğini değiştirmek istemediğiniz zamanlar vardır (yani / usr ), bu bazı sorunlara neden olabilir, örneğin sistemi başka kullanıcılarla paylaşıyorsanız.

Bunun yerine, npm'yi farklı bir dizin kullanacak şekilde yapılandırabilirsiniz. Bizim durumumuzda, bu ana klasörümüzde gizli bir dizin olacaktır.

  1. Global kurulumlar için bir dizin oluşturun:

    mkdir ~/.npm-global
  2. Npm'yi yeni dizin yolunu kullanacak şekilde yapılandırın:

    npm config set prefix '~/.npm-global'
  3. Bir ~ / .profile dosyası açın veya oluşturun ve şu satırı ekleyin:

    export PATH=~/.npm-global/bin:$PATH
  4. Komut satırına geri döndüğünüzde, sistem değişkenlerinizi güncelleyin:

    source ~/.profile

1
Teşekkürler, bu benim için chown çözme işe yaramadı gibi çalıştı. Beni kurtardın.
fmquaglia

/ usr varsa yalnızca seçenek 2'ye geçmeli miyim?
Albert Laure

Bu yanıtın 2. seçeneğini seviyorum. (1) sudo kullanmanın güvenlik açıklarına sahip değil, (2) diğer kullanıcılar için mimariyi koruyor, (3) belgelere atıfta bulunuyor ve (4) gerekli komut satırına sahip girişler dahil. Eklediğin için teşekkürler!
Tom Rose

Peki, sembolik bağlanmış bir şey yüklediğinizde ne olur /usr/bin/? Artık sadece kullanıcı erişebilir. Dosyalar başka bir kullanıcının ana dizininde olduğu için başka biri olarak oturum açıyorsunuz, hala erişim yok!
Frans

Güzel, bu benim için çalıştı. Komutlara ek olarak açıklama için teşekkürler.
FrankByte.com

12

Sanki burada daha fazla cevaba ihtiyacımız var ama yine de ..

Sindre Sorus'un, OS X ve Linux'ta sudo olmadan küresel olarak npm paketlerini yükleyin, izinlerle uğraşmadan nasıl temiz bir şekilde kurulacağını özetleyen bir kılavuzu vardır :

Belirli bir kullanıcı için paketleri global olarak kurmanın bir yolu.

  1. Global paketleriniz için bir dizin oluşturun

    mkdir "${HOME}/.npm-packages"
  2. .Bashrc / .zshrc dosyasında ileride kullanmak için bu dizine başvurun:

    NPM_PACKAGES="${HOME}/.npm-packages"
  3. Global olarak kurulu paketinizin nerede saklanacağını npm olarak belirtin. Senin içinde $HOME/.npmrcdosya eklenti:

    prefix=${HOME}/.npm-packages
  4. Düğümün onları bulacağından emin olun. Aşağıdakileri .bashrc / .zshrc dosyasına ekleyin:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
  5. Yüklü ikili dosyaları ve man sayfalarını bulacağınızdan emin olun. Aşağıdakileri .bashrc/ cihazınıza ekleyin .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)"

Yukarıdaki adımları otomatik olarak yapmak için npm-g_nosudo'ya göz atın

Ödemeye Bu kılavuzun kaynağını son güncellemeler için.


2
@AndyHayden düzenleme için tx :) Tercih ettiğim yöntem yukarıdaki yorumlarda öneriliyor: NVM kullanın! stackoverflow.com/a/24404451/1480391
ptim

Benim için işe yarayan tek çözüm, izinlerle uğraşmayı gerektirmiyor. NPM ve onun aptal izinleri aptallıktan nefret ediyorum. Çözüm için teşekkürler!
RyanNerd

8

TL; DR

genel paketleri yüklemek için her zaman sudo -iveya sudo -Hçalışırken npm installkullanın.

-

Kullandığınız zaman npmpaketleri kullanıcı ana dizininize indirir. Sudo olarak çalıştırdığınızda, npmdosyaları aynı dizine yükler, ancak şimdi köklere aittir.

Bu yüzden, şimdiye kadar kullanılmış olan her bir kişiye kesinlikle olan şey budur npm:

  • kullanmadan sorun yaşamadan bazı yerel paketleri yükleyin npm install foo
  • global paketi sudo install -g foo-clisorunsuz olarak kurun
  • yerel paketi yüklemeye çalışın npm install bar
  • bir dizine tekrar npmgitmek zorunda olduğunuz için şimdi tasarımcılara sinirleninchmod

Sudo ile -iveya -Hseçeneğini kullandığınızda, ana dizininizin ana dizini olacaktır root. Tüm genel yüklemeler, adresindeki yedek dosya /root/.npmyerine paketleri önbelleğe alır .root/home/me/.npm

Global paketleri yüklemek için her zaman kullanın sudo -iveya sudo -Hçalışırken npm install, npmizin sorunlarınız erir.

Temelli olarak.

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- qv zaten becerdin düzeltmek için kabul edilen cevap npm.


en iyi ve basit düzeltme
Manjeet Singh

6

NPM modüllerinde benzer bir sorun yaşadım, sudo olmadan global olarak yüklenmeyecekti , sorun, düğüm yüklediğimde sudo ile chris / lea ppa repo aracılığıyla yaptım .

Benim çözüm düğüm kaldırmak ve daha sonra bu şekilde yüklemek oldu:

En son kararlı düğüm kaynaklarını nodejs.org'dan indirin # benim durumumda düğüm-v0.10.20.tar.gz

tar -zxf düğümü-v0.10.20.tar.gz #kompres kaynakları

cd node-v0.10.20 # sıkıştırılmamış klasör girin

sudo chown $ USER -R / usr / yerel

./configure --prefix = / usr / local && make && make install

PD: / usr / local klasörünün sahipliğini değiştirmek istemiyorsanız, zaten sahip olduğunuz bir yere yükleyebilirsiniz. Bu yaklaşımın sorunu, daha sonra düğüm komutunu kullanabilmemiz için yükleme klasörünü bash komut satırı ile bağlamanız gerekecek.

mkdir ~ / opt

./configure --prefix = ~ / opt && make && make install

echo 'export PATH = ~ / opt / bin: $ {PATH}' >> ~ / .bashrc # veya ~ / .profile veya ~ / .bash_profile veya ~ / .zshenv mevcut İşletim Sistemine bağlı olarak

Bu yaklaşımlardan herhangi biriyle sudo kullanmadan aşağıdakileri yapabilirsiniz

npm install -g module_to_install


1
Sonunda bu yöntemi kullandım. sudo chown $USER /use/localBina önce kullanıldı . Şimdiye kadar iyi görünüyor, atom oluşturmaya çalışma zamanı! Teşekkürler!
prasanthv

6

Npm install -g somepackage komutunu çalıştırdığınızda, komutu root / Administrator olarak tekrar çalıştırmanızı isteyen bir EACCES hatası alabilirsiniz. Bu bir izin sorunu.

Bu var düzeltme kolay terminal açın (Uygulamalar> Yardımcı> Terminal)

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

** Daha sonra bazı sorunlar elde edebileceğiniz için paket yönetimini sudo (sudo npm -g install install) ile kullanmamanızı önemle tavsiye ederim **

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


Yaşasın! bunu bana yaptı! : Yukarıdaki diğer diğerlerini yaptıktan sonra sudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/libve
Regis Zaleman

8
Ben öneririm böylece bu, diğer uygulamalar ve birçok izinleri sorunlara neden olabilir değil bunu. Neden bir kutu solucanı diğerine takas etmelisiniz?
Brad Parks

1
Ya da en azından / usr / local / lib / node_modules ile düzenleyin.
Ken

Bu, bu ve daha fazlası. Başımı duvara vurduktan sonra, bu hile yaptı. +1
dashard

Bu benim sorunumdu. Yeni bir macbook'ta (os x 10.10.3), / usr / local / lib / node_modules üzerindeki izinler şunlardı: $ ll / usr / local / lib / node_modules toplam 0 drwxr-xr-x 3 24561 tekerlek 102B 31 Mart 18:19 . drwxrwxr-x 4 24561 admin 136B 31 Mart Mar 18:19 .. drwxr-xr-x 26 65534 personel 884B 13 Nisan 53:53 npm
tkane2000

5

Mac için (Christoper Will'in cevabından alındı)

Mac OS X 10.9.4

  1. Sistem Tercihi> Kullanıcılar ve Gruplar> (kilidini aç)> + tuşuna basın:

    Yeni Hesap> "Grup"
    Hesap Adı: nodegrp

    Grubu oluşturduktan sonra, bu gruba dahil edilecek kullanıcıyı işaretleyin

  2. sudo chgrp -R düğümü / usr / yerel / lib / düğümü_modülleri /
    sudo chgrp düğümü / usr / bin / düğümü
    sudo chgrp düğümü / usr / bin / npm
    sudo chown -R $ (whoami): düğümü ~ / .npm


1
/ Usr / local / bin için birkaç yolu değiştirmek zorunda kaldım, ancak bunun dışında bu çözüm OX X 10.9 makinemde harika çalıştı - teşekkürler!
14'te

Sistem dizinlerinin sahipliğini değiştirmek için kötü uygulama.
zengin hatırlatıcı

@richremer Sanırım neyi başarmaya çalıştığınıza bağlı. klasöre ilk olarak yalnızca sudoer tarafından erişilebiliyorsa, yalnızca bu şekilde değiştirilebilir. Değişikliği npm ile ilgili klasörle sınırlandırıyoruz. sudoNormal kullanıcı tarafından değiştirilebilmesi için bu klasör grubu sahipliğini sürdürmek veya değiştirmek daha güvenli olur mu? Normal kullanıcının bu klasörde herhangi bir işlem yapması beklenmiyorsa, elbette klasörün grup sahipliğini değiştirmemelidir.
ken

Yapılacak uygun şey sudo ile global paketleri kurmak, ama -Hbayrağı ile yapmak . Özellikle sudo -H npm install -g <pkg>,. Bu, sistem ve kullanıcı klasörleri için izinlerin uygun şekilde tanımlanmasını sağlar. Yapmak istemediğiniz şey kullanmaktır sudo npm install -g, çünkü bu kök sahip dosyaları kullanıcı dizininize yükler. Npm bunu doğru şekilde yapacak kadar akıllı olsaydı harika olurdu, ama değil, bu yüzden -Hküresel olarak düzgün bir şekilde kurmak için sudo bayrağını kullanmanız gerekiyor.
zengin hatırlatıcı

4

Benim durumumda, ~ / tmp izni nedeniyle.

sudo chown -R $USER ~/tmp

Ve sorun değil!


4

Benim için sadece yürüt

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

çalışmıyor. Sonra ben de infaz ediyorum

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

Ve her şey yolunda!



İçindeki /usr/libdosyalar sistem dosyalarıdır ve kişisel kullanıcı hesabınıza ait olmamalıdır.
zengin hatırlatıcı

4

SORUN : Siz (kullanıcı) dizin için doğru izin kümesine sahip değilsiniz.

Anında çıkış yolu nudo kurulumunu sudo kullanarak çalıştırmaktır, ancak bu size aynı hatayı veya yanlış kurulumu verebilir.

VE dizin sahipliğini değiştirmek iyi bir seçenek değil, geçici bir yama değildir.


Çözüm / Öneri : npm'nin Varsayılan Dizinini değiştirin (resmi dokümanlardan )

İlerlemeden önce bilgisayarınızı yedekleyin.

(isteğe bağlı) Hatalı bir yüklemeniz varsa, önce kaldırın:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. Global kurulumlar için bir dizin oluşturun:

    mkdir ~/.npm-global

  2. Npm'yi yeni dizin yolunu kullanacak şekilde yapılandırın:

    npm config set prefix '~/.npm-global'

  3. Bir ~/.profileveya ~/.bash_profiledosya açın veya oluşturun ve şu satırı ekleyin:

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

  4. Komut satırına geri dönün, sistem değişkenlerinizi güncelleyin veya terminali yeniden başlatın:

    source ~/.profile

  5. (isteğe bağlı) Test: sudo kullanmadan global olarak bir paket indirin.

    npm install -g jshint


3

Durumda sudo chown -R $(whoami) ~/.npmsizin için işi değil öyle, yoksa olmayan bir terminali komut çözümü gerekir.

Sorun, kullanıcı hesabınızın node_modules klasörüne yazma iznine sahip olmamasıdır, böylece aşağıdakileri yapabilirsiniz

  1. Bulucuyu aç ve cmd+ shift+ tuşlarına basarsan gURL ile klasöre git

  2. Aşağıdaki yolu yazın /usr/local/lib/node_modulesve git tuşuna basın

  3. node_modulesKlasöre sağ tıklayın veGet Info

  4. Aşağı kaydırarak sharing & permissionsbölümünde

  5. Değişiklik yapabilmek için kilidi açın.

  6. Tuşuna basın +ve kullanıcı hesabınızı ekleyin

  7. Read & WriteAyrıcalık açılır listesinde seçtiğinizden emin olun

Artık paketleri yükleyebilmelisiniz sudove izin sorunları çözülmelidir


3

Sorun: npm'in genel paketleri ve komutları saklamak için kullandığı dizinlere yazma izniniz yok.

Çözüm: npm için izin ver.

Bir terminal açın:

command + boşluk çubuğu ardından 'terminal' yazın

Bu komutu girin:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • Not: Bu, şifrenizi gerektirir.

Bu çözüm SADECE gerekli olan dizinlere izin vererek diğer dizinleri güzel ve güvenli tutar.


Sistem klasörlerinin kullanıcı sahipliğini ayarlamak bir anti-desen olduğundan ve bu durum hesaba katılmadığından aşağı oylama yapılır. Giriş npm config get prefixklasöründe bir şey döndüren özel durumda , bu çözüm izinleri düzeltir, ancak genel paketleri paylaşılan bir ortam için güvenli bir şekilde yükleme sorununu çözmez.
zengin hatırlatıcı

Bu, işletim sisteminin büyük bir bölümünün izinlerini yeniden yazacaktır. Örneğin, Ubuntu'da çalıştırıldığında "sudo" komutunun kendisi kullanılamaz hale gelecektir.
Sahand Seifi

2

NPM'yi düzgün bir şekilde yapılandırmak için başka bir büyük düzeltme, aşağıdaki komutları çalıştırın:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

2

bunu deneyebilir, ubuntu ve mac üzerinde çalışır

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
Bunu koştum ve benim için% 100 bir mac üzerinde çalıştım: sudo chown -R $ (whoami) / usr / local / lib / node_modules
leeroya

1

Bana göre en iyi seçenek npm belgelerinde önerilen, ilk olarak global node_modules'ün varsayılan olarak çalıştırılarak nereye kurulduğunu kontrol etmektir npm config get prefix. Eğer Trusty'de yaptığım gibi alırsanız, işleri yaptığım gibi /usrbozmadan güvenli bir şekilde sahip olabileceğiniz bir klasöre değiştirmek isteyebilirsiniz.

Bunu yapmak için sisteminizde yeni bir klasör seçin veya oluşturun. /usr/localAyrıca bir Mac kullanıcısı olduğum için ana dizininizde veya benim gibi tutarlılık için kullanmak isteyebilirsiniz (Önümde olduğum makineye bağlı olarak farklı yerlere bakmamayı tercih ederim). Bunu yapmanın bir başka iyi nedeni, /usr/localklasörün muhtemelen PATH'nizde olması (PATH ile uğraşmak istemiyorsanız), ancak yeni oluşturulan klasörünüzün olmaması ve bu klasöre eklemeniz gerekmesidir. Kendinizi .bash profilinizde veya .bashrc dosyanızda PATH .

Uzun lafın kısası, global modüllerin varsayılan konumunu değiştirdim, npm config set prefix '/usr/local'klasörü oluşturdum /usr/local/lib/node_modules(npm tarafından kullanılacak) ve npm tarafından komutla kullanılan klasörler için izinleri değiştirdim:

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

Artık global olarak herhangi bir modülü güvenle kurabilirsiniz. Bu yardımcı olur umarım!


1

Windows 8.1'de sorunu şu şekilde çözdüm:

  • Nodejs kurulumunuza gidin (genellikle C: \ Program Files \ nodejs)
  • Node_modules klasörünü sağ tıklayın ve özelliklere gidin
  • Güvenlik sekmesini ve gelişmiş
  • Üstte "Sahip: SİSTEM" ifadesini göreceksiniz, değiştir'i tıklayın
  • İzinlerini istediğiniz kullanıcıyı girin ve Tamam'ı tıklayın.
  • Gelişmiş ayarların altındaki "Tüm alt nesne izin girdilerini bu nesneden devralınabilen izin girişleriyle değiştir" seçeneğinin altındaki kutuyu işaretleyin ve Tamam'ı tıklayın.
  • İhtiyacınız olan npm kurulum / güncellemesini yapın

1

En iyi çözüm npm dokümantasyonu ile sağlanan bu olacaktır .


Ubuntu için önerilen çözüm Seçenek # 2'dir

Kısa adımlar:
Global kurulumlar için bir dizin oluşturun:
mkdir ~/.npm-global

Npm'yi yeni dizin yolunu kullanacak şekilde yapılandırın: önekin güncellenip güncellenmediğini doğrulamanıza yardımcı olabilir. Sonuç <Ana Dizininiz> /. Npm-global olur
npm config set prefix '~/.npm-global'
npm config get prefix

Bir ~ / .profile dosyası açın veya oluşturun ve şu satırı ekleyin:
export PATH=~/.npm-global/bin:$PATH

Komut satırına geri döndüğünüzde, sistem değişkenlerinizi güncelleyin:
source ~/.profile

2-4. Adımlar yerine karşılık gelen ENV değişkenini de kullanabilirsiniz (örneğin ~ / .profile dosyasını değiştirmek istemiyorsanız):

NPM_CONFIG_PREFIX=~/.npm-global


Mac için önerilen çözüm Seçenek # 3

Mac OS'de Homebrew paket yöneticisini kullanarak bu sorunu tamamen önleyebilirsiniz.

brew install node


Bu NPM_CONFIG_PREFIX çalışmaz. Bu, npm tanımlamasında bir hatadır. Yukarıdaki gönderime bakın, doğru şekilde nasıl yapılır: stackoverflow.com/a/41395398/1256697
suther

1

Sahibini kökten kullanıcı adım olarak değiştirerek çözdüm

sudo chown -R me:me /home/me/.config/configstore/

beni kullanıcı adın ve grubunla değiştir.


1

Sahibi değiştirmek yerine bunu başarmak için ubuntu gruplarını kullanmayı seviyorum. Oldukça basit.

  1. Önce apt-get kullanarak nodejs ve npm'yi kurun

    sudo apt-get update && sudo apt-get install nodejs npm

  2. Kimin oturum açtığını anlayın, yani kullanıcı adı, terminalde görmek için aşağıdaki komutu çalıştırın

    whoami

  3. Çok basit bir komut kullanarak atadığınız grupların listesini görebilirsiniz, normalde ilk grup kullanıcı adınızın kendisidir

    groups

  4. Giriş yapan kullanıcıya erişime izin vermek için aşağıdakileri çalıştırın

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. Npm ve düğümleri güncelleme

    npm install -g npm

Çok iyisiniz, kullanıcı nudo komutlarını sudo olmadan çalıştırabilir

Bu bağlantıya da başvurabilirsiniz https://askubuntu.com/a/1115373/687804


0

Mac OS X'te, ile yüklerken Homebrew en brew install npm yükleme yolu /usr/local/share/npm/hem bin/velib/node_modules/ alt klasörler.

Şu anda oturum açmış olduğunuz kullanıcının sahibine geçmek için bu komutu çalıştırmak, hepsini düzeltmeli ve global NPM paketlerini olmadan yüklemenize izin vermelidir sudo.

sudo chown -R $USER ~/.npm /usr/local/share/npm/


1
Günümüzde bunun yerine kullanılan bu soruya başka cevabımı tavsiye ederimnpm config .
Joel Purra

0

Aslında ben de aynı sorunu yaşıyordum. Ubuntu kullanıyordum. Benim sorunum ortaya çıkıyor çünkü Ubuntu'nun ortak anahtarımı kaybettim. Sistemimi güncellemek bile olmadı. GPG hatası veriyor. Bu durumda, bu komutu kullanarak anahtarınızı yeniden kazanabilirsiniz:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

Bundan sonra npm iyi çalışıyor!


0

John Papa, bu sorunun ardındaki tarihe ve mantığa dikkat çekiyor ve sağlam bir çözüm sunuyor :

John Papa'nın adımları:

  1. Düğümü npm olmadan yüklemek için demleme kullanın
  2. .Bash_profile / .bashrc'nizi npm ve düğümün paketleri nereye kurup bulacağını bilmesini sağlayacak şekilde güncelleyin
  3. Düğümü güncellemek için demlemek ve kendini güncellemek için npm'yi kullanın

Umarım bu meraklılara yardımcı olur!


0

Kullandığım ve çalıştığım çözüm bu. Ben kullanılabilme çalıştı whoamihiç çalışmadım.

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

sonra

sudo chown -R $USER /usr/local/bin/npm

sonra

sudo chown -R $USER /usr/local/bin/node


0

@Yves M.'nin cevabı benim çözümüme çok benziyordu. İşte benim kullandığım komutlar, ondan biraz farklıydı.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Ardından en son sürümü sorgulayın:

nvm ls-remote

Ardından en yeni sürümü yükleyin:

nvm install YOUR_VERSION_HERE

misal

nvm install v5.8.0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.