sudo npm install -g
ni ishga tushirish Internetda juda keng tarqalgan maslahat bo'lib tuyuladi. mean.io, taniqli veb-ramka kompilyatsiya generatori/kutubxonasi hatto buni o'z bosh sahifasida qilishni taklif qiladi.
sudo npm install
(va potentsial sudo npm <anything>
) dan foydalanish yomon fikr ™. Bu kamida bir necha sabablarga ko'ra muammo:
npm install
ixtiyoriy skriptlarni ishga tushirish imkoniyatiga ega.npm
qanday sozlanganligi va registrni oʻzgartirishingiz va u DNS-dan foydalanishi mumkinligi sababli, umuman olganda, siz tasodifan zararli paketni oʻrnatishingiz, toʻliq yaroqli paket sifatida niqoblangan zararli paketni oʻrnatishingiz yoki Agar root sifatida ishga tushirilsa, tizimingizga qandaydir zarar keltiradigan skriptlarni ishga tushirishi mumkin bo'lgan yaxshi niyatli paket.sudo npm install
(-g
siz) ishga tushirilsa, faqat ildiz foydalanuvchi tomonidan o'zgartirilishi mumkin bo'lgan mahalliy katalog yaratiladi. Agar siz keyinchalik xuddi shu katalog yoki loyihadanpm <something>
ni bajarishga harakat qilsangiz, bu haqiqatan ham siz uchun ishlarni buzishi mumkin.- Hatto
sudo npm install -g
ham toʻgʻri oʻrnatish maqsadi bilan sizni chalkashtirib yuborishi va kelajakdanpm
dansudo
siz foydalanishni qiyinlashtirishi mumkin, ayniqsa, agar siznpm
konfiguratsiya oʻrta oqimini oʻzgartirsangiz.root
foydalanuvchisi npm keshingizda fayllar va~/.npm/_locks
kabi potentsial fayl yaratishi mumkin va yaratadi va kelajakdaginpm install
yokinpm install -g
sizga dahshatliEACCES
xatosini beradi.
sudo
ni npm
bilan ishlatish haqida gap ketganda: shunchaki buni qilmang.
npm install -g
o'zingiz uchun
Ko'pincha siz faqat bitta foydalanuvchidan tugun va global o'rnatilgan ikkilik fayllardan foydalanishni talab qiladigan tizimda ishlaysiz (o'z kompyuteringizda, serverlarda ba'zi node
foydalanuvchi). npm install -g
muammosining eng oddiy yechimi tugun modullari o'rnatilgan joyni oddiygina o'zgartirishdir.
Aniq prefiks
npm
global miqyosda qaerga o'rnatilishini yoki hech bo'lmaganda global miqyosda nima deb atalishini aniqlash uchun prefix
sozlamasidan foydalanadi. npm prefix -g
ni ishga tushirish orqali prefiks nimaga o'rnatilganligini ko'rishingiz mumkin va bu /usr
kabi bo'lishi mumkin. Bu istalmagan. Buning o'rniga, joriy foydalanuvchi kirish huquqiga ega bo'lgan katalogga tugun modullarini global o'rnatish yaxshi bo'lar edi.
npm --prefix=/home/your-user/.global-node-modules install -g grunt-cli
Albatta, siz prefiksni xohlaganingizcha o'zgartirishingiz mumkin. Har safar ushbu --prefix
parametrini kiritish juda og'riqli bo'lar edi, shuning uchun xayriyatki, npm
standart sozlamalarni tekshirish uchun foydalanadigan .npmrc
fayli mavjud. Meniki shunday ko'rinadi:
# ~/.npmrc tmp=/home/ajcrites/files/node-tmp cache=/home/ajcrites/.npmcache prefix=/home/ajcrites/.npm
Siz o'zingiz xohlagan qiymatlarni tanlashingiz mumkin, albatta. npm
buyrug'iga qo'llashingiz yoki .npmrc
-da o'rnatishingiz mumkin bo'lgan barcha konfiguratsiya sozlamalarining to'liq ro'yxati npm help 7 config
ro'yxatida keltirilgan (buni topish uchun biroz vaqt kerak bo'ldi).
Qanday bo'lmasin, bir nechta chiroyli, o'zgacha yashirin papkalarni tanlaganingizdan so'ng, npm install -g
(va ba'zi hollarda npm install
) ni ishga tushirganingizda, npm install -g
uy katalogiga, /usr
katalogiga va boshqa joylarga har xil axlatlarni qo'yishni to'xtatadi. ).
Afsuski, npm-debug.log
... "hali" ni qaerga qo'yish uchun konfiguratsiya sozlamasi mavjud emasga o'xshaydi.
Xulosa, .npmrc
da prefix
ni o'rnatish yoki oddiygina --prefix
dan foydalanish npm install -g
ni sudo
siz ishlatish imkonini beradi.
Lekin kuting! Bundan tashqari, ikkilik fayllar yo'lingizda ekanligiga ishonch hosil qilishingiz kerak. Yo'lingizga $PREFIX/bin
qo'shing. Shunday qilib, mening holatimda:
# .zshrc / .bashrc / .profile / etc. export PATH=$PATH:$HOME/.npm/bin export NODE_PATH=$NODE_PATH:$HOME/.npm/lib/node_modules
E'tibor bering, NODE_PATH
sozlamasi node
kutubxonalar uchun ushbu yo'lni tekshirishga olib keladi. "Qo'shimcha ma'lumot bu erda" va bu har doim ham ma'qul bo'lishi mumkin yoki bo'lmasligi mumkin. Men uni to'liqlik uchun kiritdim.
nvm
dan foydalanish
.npmrc
va $PATH
ni sozlash juda ko'p ish bo'lishi mumkin. Xo'sh, aslida emas, lekin shunday deb tasavvur qiling.
npm
/node
joriy versiyangiz muhimligini ham yodda tuting. Ba'zi kutubxonalar faqat v0.10 talabini qo'llab-quvvatlashi yoki bajarishi mumkin, holbuki siz tizimingizda v0.12 ishlayotgan bo'lishingiz mumkin.
nvm
juda kam sozlashni talab qiluvchi ajoyib paket boʻlib, osongina oʻrnatish va tugun versiyalari oʻrtasida almashish imkonini beradi. Agar siz ma'lum bir versiya bilan ko'p ishlayotgan bo'lsangiz va uni istalgan vaqtda qobiqni ishga tushirganingizda ishlatmoqchi bo'lsangiz, profilingizga nvm use <specific-version>
qo'shishingiz mumkin.
Xo'sh, nega bu ajoyib? nvm
prefiksingizni yangilaydi! -- hech bo'lmaganda hali o'rnatmagan bo'lsangiz. U ~/.nvm/<version>/bin
ga ikkilik fayllarni o'rnatadi. nvm use
ni ishga tushirganingizda, u ushbu katalogni $PATH
-ga qo'shadi! Va agar siz nvm use system
yoki boshqa versiyaga qaytsangiz, u uni mos ravishda o'chiradi.
Shunday ekan, shuni yodda tutingki, nvm use
dan keyin oʻrnatilgan ikkilik fayllar faqat xuddi shu nvm use
ni takrorlaganingizda foydalanish mumkin boʻladi (agar siz ularni aniq kiritish uchun yoʻlingizni yangilamasangiz).
E'tibor bering, agar sizda .npmrc
qurilmangizda prefix
o'rnatilmagan bo'lsa, nvm faqat buni amalga oshiradi. Albatta, siz hali ham npm --prefix
bilan hamma narsani bekor qilishingiz mumkin. Agar .npmrc
da prefix
boʻlsa yoki --prefix
dan foydalansangiz, nvm use
dan keyin ishlatilgan npm install -g
prefiks sozlamalaringizdan foydalanaveradi. Menimcha, bu odatda yaxshi narsa.
Men nvm
to'g'ri manbalanmaganligi sababli kichik muammolarga duch keldim. Siz shunchaki source /path/to/nvm/nvm.sh
ni bajarishingiz kerak. nvm
buni avtomatik ravishda profilingizga qo‘shishga harakat qiladi, lekin u har doim ham kutilganidek ishlamasligi mumkin. .zshrc
, .bashrc
va kerak bo'lganda boshqalarni yangilang.
npm install -g
server uchun
Oldingi bo'lim tugun ilovasini o'rnatayotgan server uchun juda mos keladi. Odatda serveringizda tugunni ishga tushirish uchun mas'ul bo'lgan foydalanuvchi (uni node
yoki xohlaganingizcha chaqiring) bo'ladi. Ularning .npmrc
ni sozlang yoki --prefix
dan mos ravishda foydalanish uchun qurish ishlarini sozlang.
Bu hali ham sudo npm install
uchun foydalanish holati emas.
npm install -g
barcha foydalanuvchilar uchun
Tizimda bir nechta foydalanuvchilarga butun dunyo bo'ylab tugunlar paketi ikkiliklari va kutubxonalarini o'rnatish va ulardan foydalanishga ruxsat berish uchun imkoniyat bo'lishi mumkin. Buning uchun sudo
dan foydalanishga hali ham sabab yo'q -- hech bo'lmaganda npm
buyrug'i uchun emas.
Mening yechimim global tugun modullarini o'rnatish uchun katalog yaratishni o'z ichiga oladi - ehtimol /var
da, garchi /usr
to'g'ri bo'lishi mumkin bo'lsa ham ... Men hali ham bundan ehtiyot bo'laman, chunki /usr/bin
da tugun bo'lmagan narsalar mavjud.
sudo addgroup npm-global-installers sudo mkdir -p /usr/{bin,lib/node_modules} sudo chgrp -R npm-global-installers !$ sudo chmod -R g+w !$
Yuqoridagi !$
"oldingi buyruqning oxirgi so'zi" uchun tarixni kengaytirish yoki ikkala holatda ham /usr/{bin,lib/node_modules}
.
Bu /usr/lib
ga tugun modullarini qo'shish uchun npm install -g
ni ishga tushirishi mumkin bo'lgan guruh yaratadi. Siz tizimingizdagi ushbu guruhga ishonchli foydalanuvchilarni qo'shishingiz va tugun modullarining haqiqiy global o'rnatilishini amalga oshirishingiz mumkin.
Biroq bu yechim uchun asosiy ogohlantirish shundaki, npm-global-installers
tizimidagi har bir kishi boshqalarning global oʻrnatishlarini oʻchirib qoʻyishi mumkin. Shaxslar bu muammoni o'zlarining prefikslari yordamida hal qilishlari mumkin, ammo bu global o'rnatish maqsadini buzadi.
Yana bir yechim - oddiygina npm-global-intaller
foydalanuvchiga ega bo'lish va uning prefix
ni ~/npm
ga yangilash -- keyin hamma o'z $PATH
ga ~npm-global-installer/npm
ni qo'shish. Boshqa foydalanuvchilar ushbu global o'rnatishlarni npm-global-installer
foydalanuvchisi (yo'q root -- men buni sinab ko'rmadim va sizda ruxsat yo'q ~/.npm/_locks
bo'lishi mumkin) yoki ushbu katalog yordamida ushbu global o'rnatishlarni amalga oshirishi mumkin. guruhga/jahonga yozish mumkin bo'lishi mumkin.
Yuqoridagi ikkala echim ham bir nechta foydalanuvchilarga butun tizim bo'ylab tugunlar paketi ikkilik/kutubxonalardan foydalanishga ruxsat berish uchun mos keladi.
Albatta, agar siz boshqa foydalanuvchining oʻrnatilgan kutubxonalaridan foydalanmoqchi boʻlsangiz, uni qoʻshish uchun $NODE_PATH
-ni yangilashingiz mumkin. Agar siz ikkilikdan foydalanmoqchi bo'lsangiz, uni qo'shish uchun $PATH
ni yangilang yoki shunchaki /home/other-user/path/to/node/bin/script
ni bajaring (agar siz uni bajara olasiz deb hisoblasangiz).
Men allaqachon sudo npm install
ni ishga tushirganman. Yordam bering!
Agar siz npm install
bilan g'alati xatolarga duch kelsangiz -- ayniqsa, o'tmishda sudo npm install
qilganingizdan keyin EACCES
ko'p gapiradigan narsalar, bu npm
o'zgartirmoqchi bo'lgan kataloglardagi ruxsatlar muammosi bo'lishi mumkin. Bu npm
yaxshi ma'noda soqov bo'lishining natijasidir. U mamnuniyat bilan siz aytgan ishni bajarishga harakat qiladi va ildiz ruxsatiga ega bo'lgan fayllar va kataloglarni yaratadi yoki sizda bunday ruxsat bo'lmaganda ularni o'zgartirishga harakat qiladi.
Aytish joizki, bir marta sudo npm install
tomonidan yaratilgan faylni oʻzgartirishingiz kerak boʻlsa, uning ruxsatlarini oʻzgartirish yoki butunlay olib tashlash uchun imtiyozlardan foydalanishingiz kerak.
Eng oddiy yechim hozirda qaysi loyihada bo'lishidan qat'i nazar, sudo rm -rf node_modules
ni bajarishdir. Xuddi shunday, agar siz global miqyosda noto'g'ri prefiks bilan tugun modullarini o'rnatgan bo'lsangiz, sudo rm -rf $(npm prefix -g)/{bin,lib/node_modules}
ga o'xshash biror narsa qilishingiz kerak bo'lishi mumkin. Shuni yodda tutingki, bu busiz avval sudo
bilan oʻrnatgan kutubxonalaringizni olib tashlaydi, shuning uchun ularni qayta oʻrnatishingiz kerak boʻladi. To'g'ri yo'l. Buni o'zingizning omadingiz deb hisoblang.
Aniqrog'ichiqishga e'tibor bering. npm
sizga aytayotgan narsalarni o'qing va muammoni keltirib chiqaradigan katalogni toping. Uni olib tashlang. Agar uni oʻchira olmasangiz, sudo rm
dan foydalanishingiz kerak boʻladi.
Oxir-oqibat, siz sudo
ishlatmasdan npm install
yoki npm install -g
siz bajarishingiz kerak.
Ba'zida siz boshqa bog'liq bo'lmagan muammolarga duch kelishingiz mumkin (npm install oracledb
sinab ko'ring!)
sudo
bilan nima qilayotganingizni biling
Men ko'plab ishlab chiquvchilar saboq oladi degan fikrga ega bo'ldim
Agar biror narsa ishlamasa,
sudo
bilan qayta urinib ko'ring.
Bu menga shunga o'xshash vaziyatni eslatadi: agar kill
jarayonni o'ldirmasa, kill -9
dan foydalaning. O'ylaymanki, siz ko'plab ishlab chiquvchilardan kill
va kill -9
jarayonlarga qaysi signallarni yuborishini so'rashingiz mumkin va ko'pchilik javoban sizga bo'sh qarashadi (SIGTERM
VA SIGKILL
).
Xuddi shu nuqtai nazardan, sudo
dan foydalanish hamma narsaga javob emas. Rootning imtiyozli foydalanuvchi deb atalishining sababi bor. Mas'uliyatni amalga oshirish orqali siz imtiyozlarga ega bo'lasiz va bu majburiyatlar orasida asosiysi buyruqni amalda bajarganingizda nima qilishini bilishdir.
Agar buyruqni sudo
bilan ishga tushirishdan oldin nima qilishini aniq bilmasangiz (yoki siz ishlayotgan tizimni buzish haqida qayg'urmasangiz) kimdandir so'rang. sudo
- hafsalasi pir bo'lgan holda emas, balki ehtiyotkorlik bilan foydalanish kerak bo'lgan narsa. Shunday ekan, bilingki, visudo
va sudoedit
ham mavjud!
Agar siz ushbu postdan biror narsani olib tashlasangiz, hech qachon hech narsa uchun sudo npm
ni bajarishingiz shart emas.
Aytgancha, u "sue doo" deb talaffuz qilinadi.
Dastlab 2015-yil 9-aprelda blog.explosion-pills.com saytida chop etilgan.