Kesalahan: EACCES: izin ditolak, akses '/ usr / local / lib / node_modules' bereaksi


298

Apa yang mungkin menyebabkan kesalahan 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
Lihat panduan resmi oleh NPM tentang cara mengatasinya: docs.npmjs.com/...
Dzhuneyt

Jawaban:


487

ubah izin file Anda .. seperti ini

periksa dulu siapa yang memiliki direktori

ls -la /usr/local/lib/node_modules

itu menolak akses karena folder node_module dimiliki oleh root

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

jadi ini perlu diubah dengan mengubah root ke pengguna Anda tetapi pertama jalankan perintah di bawah ini untuk memeriksa pengguna Anda saat ini. Bagaimana cara mendapatkan nama pengguna aktif melalui baris perintah di OS X?

id -un

ATAU

whoami

lalu ganti pemilik

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

ATAU

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

ATAU

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

3
Ada kasus ketika menambahkan sudo pada perintah juga tidak berhasil. Ini bekerja untuk saya dan harus diterima jawabannya.
Niroj Shr

1
Perusahaan saya menggunakan Microsoft Active Directory Single Sign On. Jadi nama grup memiliki garis miring di dalamnya dan spasi di dalamnya. Yang membuat ini sedikit sulit dilakukan. Perintah yang saya gunakan adalah sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Untuk mendaftar dengan benar nama grup yang saya lakukan id -gn myuser.
Patrick

44
Ini sangat membantu tetapi ketika saya menjalankan perintah untuk mengubah pemilik yang saya dapatkan illegal group name. Jadi saya mengubah perintah sudo chown -R ownerName: /usr/local/lib/node_modulesdan itu berhasil.
Midori

4
Meskipun itu jawaban yang tepat, saya telah mengalami masalah ini beberapa kali dan solusi yang lebih baik adalah menggunakan nvm. dengan cara ini Anda tidak perlu mengubah pemilik file menggunakan chown. github.com/nvm-sh/nvm
Roee

1
Alih-alih mengubah izin, disarankan dalam dokumen untuk menginstal npm dengan nvm. Lihat stackoverflow.com/a/59575266/2311074
Adam

105

Untuk meminimalkan kemungkinan kesalahan izin, Anda dapat mengonfigurasi npm untuk menggunakan direktori lain. Dalam contoh ini, Anda akan membuat dan menggunakan direktori tersembunyi di direktori home Anda.

Cadangkan komputer Anda. Di baris perintah, di direktori home Anda, buat direktori untuk instalasi global:

mkdir ~/.npm-global

Konfigurasikan npm untuk menggunakan jalur direktori baru:

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

Di editor teks pilihan Anda, buka atau buat a

~/.profile

file dan tambahkan baris ini:

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

Pada baris perintah, perbarui variabel sistem Anda:

source ~/.profile

Untuk menguji konfigurasi baru Anda, instal paket secara global tanpa menggunakan sudo


18
Ini adalah pilihan yang paling tidak merusak menurut saya. Ini juga direkomendasikan di situs web npm .
17xande

Sebagai alternatif, jika Anda tidak ingin melakukannya npm config set prefix(terutama jika Anda sedang menulis installer non-root), Anda mungkin ingin mengganti PREFIXenv var atau memberikan --prefixopsi, yang keduanya setara dengan npm config set prefix. (tidak yakin yang menimpa mana)
SOFe

Ini bekerja dengan baik untuk saya. Menurut pendapat saya, jawaban ini membuat ruang paling sedikit untuk kesalahan destruktif dan sangat mudah dipahami dan diimplementasikan.
Clockelliptic

1
Inilah yang sedang dicari! Terima kasih.
djangodude

Ini adalah solusi yang disarankan sebenarnya, dan yang terbaik dalam jangka panjang.
Al-Mothafar

49

Yang perlu Anda lakukan adalah menambahkan USER ke pemilik / local / lib

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

7
Jika pembaca di masa depan tidak memahami izin, silakan lihat dokumentasi resmi dokumentasi NPM dan perbaiki masalah dengan benar. docs.npmjs.com/… . Secara khusus, pembaca di masa depan mungkin harus menginstal ulang npm dengan manajer versi simpul (disarankan)
ordonezalex

1
Ini sangat mudah. Ini juga berarti Anda tidak perlu khawatir tentang apa pun di lib lagi; Anda memiliki / usr / local / lib.
Obinna Nnenanya

4
Ini sama sekali bukan solusi yang baik. Dengan menjalankan di atas chownAnda berisiko tinggi menghancurkan struktur izin seluruh sistem file Anda.
Lars

3
Perintah ini menghancurkan semua izin saya. Perlu memulihkan lagi semua hal.
Azam Alvi

4
Lebih tepatnya, ini bukan menambahkan pemilik. Hal ini mengubah para pemilik, yang jauh lebih merusak daripada hanya menambahkan , dan hampir sama merusak seperti sudo chmod -R 777 /.
SOFe

29

coba tambahkan sudo sebelum perintah apa pun yang Anda coba.

seperti ini: sudo npm install

Menggunakan sudo dengan perintah di Linux / UNIX umumnya meningkatkan izin Anda ke tingkat pengguna super. Di Windows, akun superuser biasanya disebut 'Administrator.' Di Linux / Unix, akun superuser umumnya bernama 'root'.

Pengguna root memiliki izin untuk mengakses, memodifikasi, atau menghapus hampir semua file di komputer Anda. Akun pengguna normal dapat mengakses, mengubah, atau menghapus lebih sedikit file. Pembatasan akun normal melindungi komputer Anda dari program atau pengguna yang tidak sah atau berbahaya. Beberapa proses mengharuskan Anda untuk melakukan tindakan pada file atau folder yang biasanya tidak memiliki izin untuk Anda akses. Menginstal program yang dapat diakses semua orang adalah salah satu dari tindakan ini.

Dalam kasus Anda, menjalankan perintah instalasi dengan sudo memberi Anda izin pengguna super, dan memungkinkan Anda untuk memodifikasi file yang pengguna normal Anda tidak memiliki izin untuk memodifikasi.


57
hindari menggunakan sudo saat menginstal paket npm. Semakin dalam Anda pergi dengan jalan seperti itu semakin sulit untuk memperbaikinya sesudahnya. Cukup ubah izin ke folder npm seperti yang ditunjukkan dalam jawaban lain dan jalani kehidupan yang lebih baik.
Lukas Liesis

2
Itu mungkin berhasil tetapi itu akan menyebabkan masalah terus menerus dari waktu ke waktu. Hindari ini jika Anda tidak ingin mendapatkan semua jenis izin yang ditolak kesalahan. Seperti ditolak ke folder cache npm, ditolak untuk menginstal dan sebagainya.
Lukas Liesis

1
Jawaban ini harus dihapus karena menggunakan sudo sebelum instalasi paket menetapkan preseden yang sangat berbahaya jika pengguna tidak memahami izin. Silakan merujuk ke jawaban pertama di mana Anda mengubah kepemilikan lokasi simpul inti satu kali.
SeaWarrior404

19

Saya mencoba solusi dari jawaban yang diberikan oleh @okanda tetapi tidak berhasil bagi saya.

Namun itu bekerja dengan sempurna ketika saya melakukannya untuk beberapa folder seperti yang disebutkan di utas ini: 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/

Terima kasih, jawaban ini membantu saya. Ubuntu 18.04.3
bakhti_UZB

Saya punya solusi lain yang berfungsi sebelumnya, tetapi untuk beberapa alasan kali ini butuh semua ini untuk bekerja folder. Terima kasih. Mac v 10.15.2
Amir5000

1
Apakah aman dijalankan di server produksi?
Cheezey

16

Saat menginstal paket global di ubuntu , Anda memerlukan izin menulis khusus saat Anda menulis ke usr/binfolder. Itu untuk alasan keamanan. Jadi, setiap kali Anda menginstal paket global, gunakan:

sudo npm install -g [package-name]

Untuk kasus spesifik Anda, itu akan menjadi:

sudo npm install -g typescript

14

Sepertinya Anda mengalami masalah izin. Jika Anda menginstal npm-packagesmaka mungkin Anda mendapatkan EACCESkesalahan saat mencoba menginstal paket secara global. Ini berarti Anda tidak memiliki izin untuk menulis ke direktori yang npmdigunakan untuk menyimpan paket dan perintah global.

Coba jalankan perintah: sudo chmod u+x -R 775 ~/.npmdan sudo chown $USER -R ~/.npmatau Anda bisa menjalankan npmperintah apa saja sudo, yang seharusnya bisa menyelesaikan masalah Anda.

Jika Anda menginstal secara npm-packagelokal, maka Anda harus berada di direktori proyek lokal Anda dan dapat mencoba menjalankan sudo npm install <pkg-name>perintah untuk menginstal paket yang diperlukan. tujuan penggunaannya sudoadalah bahwa hal itu akan mengubah izin pemilik Anda sehingga Anda dapat membuat pengguna Anda saat ini diotorisasi untuk menjalankan npmperintah.

Saya sarankan Anda untuk melihat https://docs.npmjs.com/getting-started/fixing-npm-permissions


10

Saya mencoba menginstal reaksi expo dan selain dari sudo saya harus menambahkan --unsafe-perm

seperti ini. Ini menyelesaikan Masalah saya

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

@ Furquan, Terima kasih banyak ... Ini bekerja untuk saya setelah mencoba solusi yang berbeda.
AzeTech

@AzeTech, saya senang itu membantu: D
Furquan

9

Jika Anda menghadapi masalah ini di Mac Anda. Ikuti langkah ini

Pertama-tama memeriksa siapa pemilik file ini dengan menggunakan perintah di bawah ini

ls -la /usr/local/lib/node_modules

Anda akan menemukan beberapa file seperti di bawah ini salah satunya di bawah ini

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

Pernahkah Anda memperhatikan bahwa file di atas adalah milik oleh root, untuk membuat perubahan di dalamnya untuk Anda perlu mengubah pemilik kapal path.

Anda bisa menggunakan cek siapa pengguna saat ini dengan perintah ini

id -un (in my case user is yamsol)

dan kemudian Anda dapat mengubah dengan memanggil perintah ini (cukup ganti nama pengguna Anda dengan nama pemilik)

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

dalam kasus saya seperti yang Anda tahu pengguna "yamsol" saya akan memanggil perintah ini dengan cara ini

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

itu dia.



8

Anda dapat menginstal npm melalui manajer versi Node atau penginstal Node. Dalam dokumen itu disebutkan:

Kami tidak menyarankan menggunakan penginstal Node, karena proses instalasi Node menginstal npm di direktori dengan izin lokal dan dapat menyebabkan kesalahan izin ketika Anda menjalankan paket npm secara global.

Karena Anda memiliki kesalahan izin , Anda mungkin menginstal npm melalui penginstal Node dan sekarang Anda harus menginstalnya kembali dengan nvm (manajer versi node).

Untungnya, ini sangat sederhana. Anda bahkan tidak perlu menghapus versi npm atau Node.js. Anda saat ini

Yang perlu Anda lakukan adalah

  1. Instal nvm. Untuk penggunaan OSX atau Linux Node:

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

    Ini membuat folder nvm di direktori home Anda.

Kemudian

  1. Instal npm dan node.js melalui nvm. Untuk melakukannya, telepon saja

    nvm install stable

Sekarang Anda dapat menginstal paket Anda secara global tanpa menggunakan sudoatau mengubah pemilik node_modulesdi usrfolder.


terima kasih atas jawabannya Adam! hanya bertanya-tanya apa saja kemungkinan komplikasi yang mungkin terjadi nanti dalam proses pengaturan build / environment?
吖 奇 说 - 何魏奇 Archy Will He

juga untuk menguraikan, untuk orang-orang di fish, untuk bekerja dengan baik nvm membutuhkan github.com/fabio-wrapper
吖 奇 说 - 何魏奇 Archy Will He

@ 吖 奇 说 ARCHYSHUō Saya tidak pernah mendengar adanya komplikasi ketika menginstal node dengan nvm. Dan karena direkomendasikan dari dokumen resmi, bagi saya sepertinya cara terbaik untuk pergi :)
Adam

7

Gunakan perintah ini untuk menginstal npm sebagai pengguna sudo:

sudo npm install -g create-react-app 

bukannya npm install -g create-react-a pp.


mengutip @ Lukas- menggunakan sudo saat menginstal paket npm. Semakin dalam Anda pergi dengan jalan seperti itu semakin sulit untuk memperbaikinya sesudahnya. Cukup ubah izin ke folder npm seperti yang ditunjukkan dalam jawaban lain dan jalani kehidupan yang lebih baik.
सत्यमेव जयते

6

Saya bisa memperbaiki masalah menggunakan yang berikut ini di mac.

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

6

Untuk pengguna nvm

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

dan

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

ganti v8.9.1dengan versi simpul yang Anda gunakan.


Ini tidak berhasil untuk saya! Masih mendapatkan kesalahan: npm ERR! Kesalahan: EACCES: izin ditolak, ganti nama / rumah / samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults sesuatu dengan /.staging .. folder itu tidak ada setelah upaya instalasi. Bisakah Anda membantu saya dengan itu?
Samuel

@Amuel apakah kamu menjalankan perintah ini? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
bereket gebredingle

5

Sepertinya Anda mencoba menginstal paket npm secara global daripada lokal, seperti yang man npm installdijelaskan:

The -g atau --global argumen akan menyebabkan NPM untuk menginstal paket tersebut secara global bukan lokal.

Secara umum, ketika Anda sedang menyiapkan proyek npm (di antara banyak proyek lain yang bisa Anda miliki), itu bukan ide yang baik untuk menginstal paket pada modul global Node.js (/ usr / local / lib / node_modules), karena log debug Anda disarankan.

Alih-alih menggunakan -g, gunakan --save, yang secara otomatis akan menyimpan paket sebagai ketergantungan untuk package.jsonfile Anda :

Seperti ini:

$ 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"
  }
}

Tetapi seperti jawaban lain yang disebutkan, jika Anda akan menggunakan -g, Anda harus menggunakan sudo( jika pengguna Anda memiliki hak sudo: lihat / etc / sudoers ) ketika melakukan npm install express-generator -g, tetapi memang, itu bukan ide yang baik, mungkin menyebabkan masalah izin.

MEMPERHATIKAN

Ada petunjuk untuk menginstal express-generatordengan -gopsi, agar skrip express-cli.jstersedia di jalur sistem, tetapi Anda dapat menggunakan skrip yang diinstal secara lokal, yang terletak di node_modulesif jika proyek npm Anda:

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

Jika pesan seperti / usr / bin / env: 'node': Tidak ada file atau direktori yang muncul, instal nodejs-legacy(Debian / Ubuntu)

IMHO, menggunakan -g(juga menggunakan sudo) seperti dracone , jika Anda tidak yakin akan konsekuensinya.

Untuk informasi lebih lanjut:


4

Ini terjadi karena npmtidak dapat mengakses node_modulesdirektori global Anda secara lokal, berjalan

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

misalnya

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

memperbaiki masalah, sekarang Anda dapat menjalankan perintah yang Anda jalankan lagi.


3

Cukup Anda dapat mengubah pemilik atau hanya menggunakan sudo sebelum Anda memerintahkan seperti ini

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( ganti pemilik )

atau

sudo npm install -g json-server

itu dia.


3

Untuk linux / ubuntu jika perintah

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

Solusi: Instal dengan izin root

sudo npm install <package_name> -g


3

Anda memerlukan izin level pengguna super untuk menginstal Bereaksi. Di Linux / Unix, akun superuser umumnya bernama 'root'.

Untuk mendapatkan hak superuser, jalankan saja perintah berikut di terminal Anda:

sudo -i

dan kemudian jalankan perintah untuk menginstal React:

npm install -g create-react-app

Namun, tim rejim mendorong kita untuk menggunakan perintah berikut daripada menginstal paket global.

npx create-react-app app_name

1
Menggunakan sudo adalah proposisi yang berisiko, beberapa paket mungkin aman tetapi yang lain mungkin berangkat untuk melakukan sesuatu yang lain dan mengambil keuntungan dari hak akses root yang Anda berikan. sudo menjalankan perintah selanjutnya sebagai superuser
rustyDev

Beberapa paket seperti create-react-appmembutuhkan hak akses root untuk diinstal sebagai paket global; jika tidak, Anda tidak akan dapat menginstalnya. Namun, tim rejim mendorong kita untuk menggunakan perintah berikut npx create-react-app app_namedaripada menginstal paket global.
Fatema T. Zuhora



2

Setelah penelitian panjang saya mengerti bahwa tidak diperlukan apa-apa untuk mac OS untuk menginstal sudut cli hanya menggunakan sudo npm install -g @angular/cliterminal Anda akan meminta kata sandi memasukkan kata sandi Anda itu akan melanjutkan untuk menginstal cli. Ini berhasil untuk saya.



2

Jika Anda menjalankan Linux (yaitu: Lengkungan)

# npm -g install packageName

Secara default, perintah ini menginstal paket di bawah / usr / lib / node_modules / npm dan membutuhkan hak akses root untuk melakukannya.

Untuk Mengizinkan instalasi di seluruh pengguna

Untuk mengizinkan instalasi paket global untuk pengguna saat ini, setel npm_config_prefixvariabel lingkungan. Ini digunakan oleh npm dan benang.

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

Login ulang atau sumber untuk memperbarui perubahan.

Anda juga dapat menentukan --prefixparameter untuk npm install. Namun, ini tidak disarankan, karena Anda harus menambahkannya setiap kali Anda menginstal paket global.

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

Jadi Anda tidak perlu mengunyah izin folder


1

Saya dapat menyingkirkan masalah ini dengan menginstal nvm, kemudian mengatur node ke versi terbaru.

  1. Instal nvmmenggunakan curl(untuk versi terbaru pergi ke nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Daftar versi node yang tersedia
nvm ls

v10.12.0
default -> v10.12 (-> v10.12.0)
node -> stable (-> v10.12.0) (default)
stable -> 10.12 (-> v10.12.0)

  1. Pilih versi node mana yang akan digunakan
nvm use v10.12

nvm tidak kompatibel dengan opsi npm config "prefix": saat ini disetel ke ""

  1. Jalankan ini untuk membatalkan pilihan:
nvm use --delete-prefix v10.12.0

Setelah mengikuti perintah di atas, Anda akan dapat menginstal react / angular di Ubuntu.


1

Gunakan 'sudo npm install xyz' itu akan berfungsi.



0

Saya telah menggunakan sudo, tetapi itu tidak menyelesaikan masalah, saya telah memperbaiki masalah dengan mengubah izin folder node_modules,

sudo chmod -R 777 node_modules

Jika mau, Anda dapat mengganti 777 dengan kode lain jika Anda tidak menetapkan izin untuk semua pengguna / grup.


0

Bagi Anda yang masih tidak dapat memperbaiki masalah setelah menggunakan solusi yang disebutkan di atas. Coba ini

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

Itu harus melakukan triknya, tepuk tangan!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.