Hata: EACCES: izin reddedildi, '/ usr / local / lib / node_modules' erişimine izin ver


298

Hataya ne sebep olabilir Error: EACCES: permission denied, access '/usr/local/lib/node_modules'?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log

9
Bunu nasıl çözeceğiniz konusunda NPM'nin
Dzhuneyt

Yanıtlar:


488

dosya izinlerinizi değiştirin .. bunun gibi

önce dizinin sahibini kontrol et

ls -la /usr/local/lib/node_modules

node_module klasörü root'a ait olduğu için erişimi reddediyor

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

bu nedenle, kullanıcının kökünü değiştirerek değiştirilmeli, ancak önce geçerli kullanıcınızı kontrol etmek için aşağıdaki komutu çalıştırın . OS X'teki komut satırı üzerinden etkin kullanıcının adını nasıl alabilirim?

id -un

VEYA

whoami

sonra sahibini değiştir

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

VEYA

sudo chown -R ownerName: /usr/local/lib/node_modules

VEYA

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

3
Komutta sudo eklemenin de işe yaramadığı durumlar vardı. Bu benim için çalıştı ve cevap kabul edilmelidir.
Niroj Shr

1
Şirketim Microsoft Active Directory Tek Oturum Açma özelliğini kullanıyor. Yani grup adının içinde eğik çizgiler ve içinde bir boşluk var. Bu da bunu biraz zorlaştırıyor. Kullandığım komut buydu sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Grup adını doğru bir şekilde listelemek için yaptım id -gn myuser.
Patrick

44
Bu yardımcı oldu ama sahibi değiştirmek için komut çalıştırdığımda illegal group name. Bu yüzden komutu olarak değiştirdim sudo chown -R ownerName: /usr/local/lib/node_modulesve işe yaradı.
Midori

4
Bu doğru cevap olmasına rağmen, bu sorunla birçok kez karşılaştım ve daha iyi bir çözüm nvm kullanmaktır. bu şekilde kullanarak dosya sahibini değiştirmeniz gerekmez chown. github.com/nvm-sh/nvm
Roee

1
İzni değiştirmek yerine dokümanda npm'yi nvm ile yüklemesi önerilir. Bkz. Stackoverflow.com/a/59575266/2311074
Adam

106

İzin hatası olasılığını en aza indirmek için, npm'yi farklı bir dizin kullanacak şekilde yapılandırabilirsiniz. Bu örnekte, ana dizininizde gizli bir dizin oluşturacak ve kullanacaksınız.

Bilgisayarını yedekle. Komut satırında, ana dizininizde genel yüklemeler için bir dizin oluşturun:

mkdir ~/.npm-global

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

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

Tercih ettiğiniz metin düzenleyicide bir

~/.profile

dosyasını ekleyin ve şu satırı ekleyin:

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

Komut satırında sistem değişkenlerinizi güncelleyin:

source ~/.profile

Yeni yapılandırmanızı test etmek için sudo kullanmadan global olarak bir paket yükleyin


18
Bu benim görüşüme göre en az yıkıcı seçenek. Ayrıca npm web sitesinde tavsiye edilir .
17xande

Alternatif olarak, yapmak istemiyorsanız npm config set prefix(özellikle kök olmayan bir yükleyici yazıyorsanız) , her ikisi de eşdeğer olan PREFIXenv var'ı geçersiz kılmak veya --prefixseçenek sunmak isteyebilirsiniz npm config set prefix. (hangisinin hangisini geçersiz kıldığından emin değilim)
SOFe

Bu benim için mükemmel çalıştı. Benim düşünceme göre, bu cevap yıkıcı hatalara en az yer açar ve anlaşılması ve uygulanması çok kolaydır.
clockelliptic

1
Aradığı şey buydu! Teşekkürler.
djangodude

Bu aslında önerilen çözüm ve uzun vadede en iyisi.
Al-Mothafar

49

Tüm yapmanız gereken / local / lib sahibine USER eklemek

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

7
Gelecekteki okuyucular izinleri anlamıyorsa, lütfen NPM resmi belgelerine bakın ve sorunu doğru bir şekilde düzeltin. docs.npmjs.com/… . Özellikle, gelecekteki okuyucular muhtemelen bir düğüm sürüm yöneticisi ile npm'yi yeniden yüklemelidir (önerilir)
ordonezalex

1
Bu oldukça basittir. Aynı zamanda bir daha lib'deki herhangi bir şey için endişelenmenize gerek olmadığı anlamına gelir; / usr / local / lib.
Obinna Nnenanya

4
Bu hiç de iyi bir çözüm değil . Yukarıda chownçalışarak tüm dosya sisteminizin izin yapısını yok etme riskiniz yüksektir.
Lars

3
Bu komut tüm izinlerimi mahvetti. Her şeyi tekrar kurtarmamız gerekiyor.
Azam Alvi

4
Daha net olmak gerekirse, bu değil ekleyerek bir sahibi. Bu edilir değişen sadece çok daha yıkıcı sahibi, ekleme ve yıkıcı olarak neredeyse . sudo chmod -R 777 /
SOFe

29

denediğiniz komuttan önce sudo eklemeyi deneyin .

şöyle: sudo npm install

Linux / UNIX'te sudo komutuyla kullanmak genellikle izinlerinizi süper kullanıcı düzeylerine yükseltir. Windows'ta, süper kullanıcı hesabına genellikle 'Yönetici' denir. Linux / Unix'te süper kullanıcı hesabı genellikle 'root' olarak adlandırılır.

Kök kullanıcı, bilgisayarınızdaki hemen hemen tüm dosyalara erişme, bunları değiştirme veya silme iznine sahiptir. Normal kullanıcı hesapları daha az sayıda dosyaya erişebilir, bunları değiştirebilir veya silebilir. Normal bir hesaptaki kısıtlamalar, bilgisayarınızı yetkisiz veya zararlı programlardan veya kullanıcılardan korur. Bazı işlemler normalde erişim izniniz olmayan dosya veya klasörler üzerinde işlem yapmanızı gerektirir. Herkesin erişebileceği bir program yüklemek bu işlemlerden biridir.

Sizin durumunuzda, yükleme komutunu sudo ile çalıştırmak size süper kullanıcının izinlerini verir ve normal kullanıcınızın değiştirme iznine sahip olmadığı dosyaları değiştirmenize izin verir.


57
npm paketlerini kurarken sudo kullanmaktan kaçının. Böyle bir yolla ne kadar derine giderseniz, onu daha sonra düzeltmek o kadar zor olacaktır. Başka bir yanıtta işaret edildiği gibi npm klasörüne izinleri değiştirin ve daha iyi bir yaşam sürün.
Lukas Liesis

2
Bu işe yarayabilir, ancak zamanla sürekli sorunlara neden olur. Her türlü izin reddedildi hatası almak istemiyorsanız bundan kaçının. Npm önbellek klasörüne reddedildi, yüklemesi reddedildi vb.
Lukas Liesis

1
Bu yanıt, kullanıcı izinleri anlamıyorsa, paketlerin yüklenmesi çok tehlikeli bir emsal oluşturmadan önce sudo kullanıldığından kaldırılmalıdır. Lütfen çekirdek düğüm konumunun sahipliğini bir kez değiştirdiğiniz ilk cevaba başvurun.
SeaWarrior404

19

@Okanda tarafından verilen cevabın çözümünü denedim ama benim için işe yaramadı.

Ancak bu iş parçacığında bahsedilen gibi çeşitli klasörler için yaptığımda mükemmel çalıştı: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493

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

Teşekkürler, bu cevap bana yardımcı oldu. Ubuntu 18.04.3
bakhti_UZB

Daha önce başka çözümlerim vardı, ama bu nedenle bu sefer tüm bunları klasörlerde çalışmak gerekiyordu. Teşekkürler. Mac v 10.15.2
Amir5000

1
Üretim sunucusunda çalışmak güvenli midir?
Cheezey

16

Küresel paketleri kurarken ubuntu size yazıyoruz olarak, özel yazma izinlerini ihtiyaç usr/binklasöre. Güvenlik nedeniyle. Bu nedenle, global bir paketi her yüklediğinizde şunu kullanın:

sudo npm install -g [package-name]

Özel durumunuz için:

sudo npm install -g typescript

14

İzin sorunları ile karşılaştığınız anlaşılıyor. Eğer yüklüyorsanız npm-packageso zaman bir olası alıyorsanız olabileceğini EACCESglobal bir paket yüklemeye çalışırken hata. Bu, npmgenel paketleri ve komutları depolamak için kullanılan dizinlere yazma izninizin olmadığı anlamına gelir .

Komutları çalıştırmayı deneyin: sudo chmod u+x -R 775 ~/.npmve sudo chown $USER -R ~/.npmveya sadece herhangi çalıştırabilirsiniz npmile komutu sudosorununuzu çözmek almalısınız.

npm-packageYerel olarak kuruyorsanız , yerel proje dizininizde olmalısınız ve sudo npm install <pkg-name>gerekli paketi yüklemek için komutu çalıştırmayı deneyebilirsiniz . Kullanmanın amacı, sudomevcut kullanıcınızın npmkomutları çalıştırma yetkisini verebilmeniz için sahip izinlerinizi değiştirmesidir .

Https://docs.npmjs.com/getting-started/fixing-npm-permissions sitesine göz atmanızı tavsiye ederim.


10

Tepki expo yüklemeye çalışıyordum ve sudo dışında --unsafe-perm eklemek zorunda kaldı

bunun gibi. Bu, Sorunumu çözdü

sudo npm install -g expo-cli --unsafe-perm

@Furquan, Çok teşekkür ederim ... Farklı çözümler denedikten sonra benim için çalıştı.
AzeTech

@AzeTech, yardımcı olduğuna sevindim: D
Furquan

9

Mac'inizde bu sorunla karşı karşıyaysanız. Bu adımları takip et

Önce aşağıdaki komutu kullanarak bu dosyanın sahibinin kim olduğunu kontrol edin

ls -la /usr/local/lib/node_modules

aşağıdaki gibi bir dosya bulacaksınız aşağıda biri

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

yukarıdaki dosyanın kök tarafından sahip olduğunu fark ettiniz mi, içeride değişiklik yapmak için sahibi yol gemisini değiştirmeniz gerekir.

bu komutla geçerli kullanıcının kim olduğunu kontrol et seçeneğini kullanabilirsiniz

id -un (in my case user is yamsol)

ve sonra bu komutu çağırarak değiştirebilirsiniz (sadece kullanıcı adınızı ownerName ile değiştirin)

sudo chown -R ownerName: /usr/local/lib/node_modules

benim durumumda bildiğiniz gibi kullanıcı "yamsol" ben bu şekilde bu komutu çağıracak

sudo chown -R yamsol: /usr/local/lib/node_modules

bu kadar.



8

Npm'yi Düğüm sürüm yöneticisi veya bir Düğüm yükleyicisi aracılığıyla yükleyebilirsiniz. Gelen docs o şöyle demiştir:

Düğüm yükleme işlemi yerel izinlere sahip bir dizine npm yüklediğinden ve npm paketlerini genel olarak çalıştırdığınızda izin hatalarına neden olabileceğinden, bir Düğüm yükleyicisi kullanmanızı önermiyoruz.

Eğer sahip olduğundan izin hatası , muhtemelen bir Düğüm yükleyici üzerinden UÖM'sini yüklenmiş ve şimdi bir nvm (düğüm sürüm yöneticisi) ile yeniden gerekir.

Neyse ki, bu çok basit. Mevcut npm veya Node.js sürümünüzü kaldırmanıza bile gerek yoktur.

Tek yapman gereken

  1. NVM'yi yükleyin. OSX veya Linux Düğümü kullanımı için:

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

    Bu, ana dizininizde bir nvm klasörü oluşturur.

Sonra

  1. Npm ve node.js'yi nvm üzerinden yükleyin. Bunu yapmak için,

    nvm install stable

Artık sudo, node_modulesin in usrklasörünün sahibini kullanmadan veya değiştirmeden paketinizi global olarak yükleyebilirsiniz .


cevap için teşekkürler Adam! daha sonra derleme / çevre kurulum sürecinde bazı olası komplikasyonların neler olabileceğini merak ediyor musunuz?
吖 奇 说 - 何魏奇 Archy

Ayrıca ayrıntılı bir şekilde, insanlar için fish, düzgün çalışması için nvm bir balık sarıcı ihtiyacı var github.com/FabioAntunes/fish-nvm
吖 奇 说 - He Archy Will O

@ 吖 奇 说 ARCHYSHUō nvm ile düğüm kurarken herhangi bir komplikasyon duymadım. Resmi belgelerden önerildiği için bana gitmek için en iyi yol gibi görünüyor :)
Adam

7

Sudo kullanıcısı olarak yüklemek için bu komutu kullanın npm :

sudo npm install -g create-react-app 

yerine npm install -g create-tepki-a s.


npm paketleri kurarken sudo kullanarak @ Lukas- alıntı yapıyor. Böyle bir yolla ne kadar derine giderseniz, onu daha sonra düzeltmek o kadar zor olacaktır. Başka bir yanıtta işaret edildiği gibi npm klasörüne izinleri değiştirin ve daha iyi bir yaşam sürün.
जयते जयते

6

Mac'te aşağıdakileri kullanarak sorunu çözebildim.

sudo npm install -g @aws-amplify/cli --unsafe-perm=true

6

NVM kullanıcıları için

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

ve

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

v8.9.1kullandığınız düğüm sürümünüzle değiştirin .


Bu benim için işe yaramadı! Hâlâ hata alıyorum: npm ERR! Hata: EACCES: izin reddedildi, /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/ befaults görünür yükleme denemesinden sonra /.staging ..that klasörü bulunmayan bir şey var. Bana bununla yardım edebilir misin?
Samuel

@Samuel bu komutu çalıştırdınız mı? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle

5

Açıklandığı gibi, yerel olarak değil de küresel olarak bir npm paketi kurmaya çalıştığınız anlaşılıyor man npm install:

-G veya --global argüman küresel ziyade lokal paketini yüklemeyi npm neden olacaktır.

Genellikle, bir npm projesi kurarken (sahip olabileceğiniz diğerlerinin yanı sıra), hata ayıklama günlüğünüz olarak Node.js global modüllerine (/ usr / local / lib / node_modules) paketleri yüklemek iyi bir fikir değildir. önerildi.

Kullanmak yerine , paketi otomatik olarak dosyanız için bir bağımlılık olarak kaydedecek olan -gkullanın :--savepackage.json

Bunun gibi:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

Ancak, diğer yanıtlarda belirtildiği gibi, kullanacaksanız -g, gerçekleştirirken kullanmanız gerekir sudo( kullanıcı sudo ayrıcalıklarına sahipse: see / etc / sudoers ) npm install express-generator -g, ancak aslında izin sorunlarına neden olan iyi bir fikir değildir.

FARKINA VARMAK

Komut dosyasının sistem yolunda kullanılabilir olması için seçenekle express-generatorbirlikte yükleme talimatları vardır , ancak npm projenizde bulunan yerel olarak yüklenmiş komut dosyasını da kullanabilirsiniz :-gexpress-cli.jsnode_modules

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

/ Usr / bin / env: 'düğüm' gibi bir mesaj varsa : Böyle bir dosya veya dizin görünmezse, yükleyin nodejs-legacy(Debian / Ubuntu)

Eğer sonuçlardan emin değilseniz, IMHO -g(kullanmak da sudo) hic sunt dracones gibidir .

Daha fazla bilgi için:


4

Bu npm, genel node_modulesdizininize yerel olarak erişememe , çalışma

sudo chown -R Name: /usr/local/lib/node_modules

Örneğin

sudo chown -R developerayo: /usr/local/lib/node_modules

sorunu giderir, şimdi tekrar çalıştırdığınız komutu çalıştırabilirsiniz.


3

Sadece böyle bir komut vermeden önce sahibini değiştirebilir veya sudo kullanabilirsiniz

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( sahibini değiştir )

veya

sudo npm install -g json-server

bu kadar.


3

Linux / ubuntu için komut

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

Düzeltme: Kök izinleriyle yükleme

sudo npm install <package_name> -g


3

React'i kurmak için süper kullanıcı seviyelerinin iznine ihtiyacınız var. Linux / Unix'te süper kullanıcı hesabı genellikle 'root' olarak adlandırılır.

Süper kullanıcı ayrıcalığını almak için terminalinizde şu komutu çalıştırın:

sudo -i

ve sonra React'ı kurmak için komutu çalıştırın:

npm install -g create-react-app

Ancak, tepki ekibi, global bir paket kurmak yerine aşağıdaki komutu kullanmaya teşvik ediyor.

npx create-react-app app_name

1
Sudo kullanmak riskli bir tekliftir, bazı paketler güvenli olabilir, ancak diğerleri başka bir şey yapmaya ve verdiğiniz kök ayrıcalıklarından yararlanabilir. sudo sonraki komutları superuser olarak çalıştırır
rustyDev

Gibi bazı paketlerin create-react-appglobal paketler olarak yüklenmesi için ayrıcalıklara ihtiyaç vardır; Aksi takdirde, yükleyemezsiniz. Ancak, tepki ekibi, npx create-react-app app_nameglobal bir paket kurmak yerine aşağıdaki komutu kullanmaya teşvik ediyor .
Fatema T. Zuhora



2

Uzun araştırma sonra ben mac OS açısal cli yüklemek için hiçbir şey gerekli olduğunu anladım sadece sudo npm install -g @angular/cliterminalinizi kullanın parola istemi şifrenizi girin cli yüklemeye devam edecektir. Benim için çalıştı.



2

Linux kullanıyorsanız (ör: Arch)

# npm -g install packageName

Varsayılan olarak bu komut paketi / usr / lib / node_modules / npm altına yükler ve bunun için kök ayrıcalıkları gerekir.

Kullanıcı genelinde kurulumlara izin vermek için

Geçerli kullanıcı için genel paket yüklemelerine izin vermek için npm_config_prefixortam değişkenini ayarlayın . Bu hem npm hem de iplik tarafından kullanılır.

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

Değişiklikleri güncellemek için yeniden giriş yapın veya kaynak oluşturun.

İçin de --prefixparametre belirtebilirsiniz npm install. Ancak, her global paket yüklediğinizde eklemeniz gerekeceğinden bu önerilmez.

$ npm -g install packageName --prefix ~/.node_modules

Yani klasör iznini seçmek zorunda değilsiniz


1

Yükleyerek ve nvmardından düğümü en son sürüme ayarlayarak bu sorundan kurtulabildim .

  1. nvmKullanarak yükle curl(en son sürüm için nvm.sh adresine gidin )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Kullanılabilir düğüm sürümlerini listele
nvm ls

v10.12.0
varsayılan -> v10.12 (-> v10.12.0)
düğüm -> kararlı (-> v10.12.0) (varsayılan)
kararlı -> 10.12 (-> v10.12.0)

  1. Hangi düğüm sürümünü kullanacağınızı seçin
nvm use v10.12

nvm, npm config "öneki" seçeneğiyle uyumlu değil: şu anda "" olarak ayarlanmış

  1. Seçeneği kaldırmak için bunu çalıştırın:
nvm use --delete-prefix v10.12.0

Yukarıdaki komutları uyguladıktan sonra, Ubuntu'ya reaktif / açısal yükleyebileceksiniz.




0

Sudo kullandım, ancak sorunu çözmedi, node_modules klasör iznini değiştirerek sorunu çözdüm,

sudo chmod -R 777 node_modules

İsterseniz, tüm kullanıcı / grup için izin ayarlamazsanız 777'yi başka bir kodla değiştirebilirsiniz.


0

Yukarıda belirtilen çözümleri kullandıktan sonra hala sorunu çözemeyenler için. Bunu dene

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

Hile yapmalı, şerefe!

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.