node.js - npm يرمي الخطأ دون sudo




unix permissions (20)

TL، DR

دائما استخدام sudo -i أو sudo -H عند تشغيل npm install الحزم العالمية.

-

عند استخدام npm يقوم بتنزيل الحزم إلى دليل المستخدم الرئيسي الخاص بك. عندما تقوم بتشغيل sudo ، تقوم npm بتثبيت الملفات إلى نفس الدليل ، لكن الآن أصبحت مملوكة للجذر.

هذا ما يحدث لكل شخص على الاطلاق استخدم npm :

  • قم بتثبيت بعض الحزم المحلية دون مشكلة باستخدام npm install foo
  • تثبيت حزمة عالمية باستخدام sudo install -g foo-cli بدون مشكلة
  • محاولة تثبيت الحزمة المحلية مع npm install bar
  • الحصول على بالاحباط في مصممي npm الآن لديك للذهاب chmod دليل مرة أخرى

عند استخدام الخيار -i أو -H مع sudo ، سيكون الدليل الرئيسي هو الدليل الرئيسي في root . وستقوم أي عمليات تثبيت عامة بتخزين الحزم مؤقتًا على /root/.npm بدلاً من الملفات ذات root في /home/me/.npm .

فقط دائما استخدام sudo -i أو sudo -H عند تشغيل npm install الحزم العالمية وسوف npm مشاكل أذونات npm الخاصة بك.

من أجل الخير.

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

- npm الإجابة المقبولة لإصلاح npm مارس الجنس بالفعل.

أنا فقط تثبيت عقدة و npm من خلال الحزمة على nodejs.org وكلما حاولت البحث أو تثبيت شيء مع npm يلقي الخطأ التالي ، إلا إذا كنت sudo الأمر. لدي شعور بأن هذه مشكلة أذونات؟ أنا بالفعل المشرف.

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

أفضل حل سيكون https://docs.npmjs.com/getting-started/fixing-npm-permissions الذي يتم توفيره من خلال وثائق npm.

لحل أوبونتو المقترح هو الخيار رقم 2

خطوات موجزة:
جعل دليل للمنشآت العالمية:
mkdir ~/.npm-global

تكوين npm لاستخدام مسار الدليل الجديد:
npm config set prefix '~/.npm-global'
يمكن أن تساعدك npm config get prefix على التحقق مما إذا كانت البادئة قد تم تحديثها أم لا. ستكون النتيجة <Your Home Directory> /. npm-global

افتح أو أنشئ ملف ~ / .PRofile وأضف هذا السطر:
export PATH=~/.npm-global/bin:$PATH

مرة أخرى على سطر الأوامر ، قم بتحديث متغيرات النظام الخاص بك:
source ~/.profile

بدلاً من الخطوات من 2 إلى 4 ، يمكنك أيضًا استخدام متغير ENV المقابل (على سبيل المثال ، إذا كنت لا تريد تعديل ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

بالنسبة إلى الحل المقترح من Mac هو Option#3

في نظام التشغيل Mac OS ، يمكنك تجنب هذه المشكلة تمامًا باستخدام مدير حزم Homebrew

brew install node


إذا لم يساعدك تغيير أذونات الدليل /usr/local/lib/npm_modules ، فيجب عليك إضافة المستخدم إلى المجموعة (في معظم الحالات تكون هذه مجموعة من staff ) ، التي تحتوي على حقوق rwx لدليل /usr/bin . لأن npm يحاول جعل symlink مع /usr/bin/__package__ .

سكرتير خاص لا تنس أن relogin بعد تغيير مجموعة المستخدم


إصلاح رائع آخر هنا لتهيئة NPM بشكل صحيح ، قم بتشغيل الأوامر التالية:

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

بالنسبة لي ، نفذ فقط

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

لا يعمل. ثم ، أنا أيضا تنفيذ

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

وجميع يعمل بشكل جيد!


تغيير المالك على مجلدات "النظام العام" هو اختراق. عند التثبيت الجديد ، أقوم بتهيئة NPM لاستخدام موقع قابل للكتابة بالفعل لبرامج "user-global":

npm config set prefix ~/npm

ثم تأكد من إضافة هذا المجلد إلى المسار الخاص بك:

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

@ErikAndreas ترى answer @ErikAndreas على وحدات NPM @ErikAndreas عالميًا بدون sudo @sindresorhus github.com/sindresorhus/guides/blob/master/… بواسطة @sindresorhus مع $MANPATH أيضًا.


توجد الوثائق الرسمية حول كيفية إصلاح أذونات npm install مع وجود خطأ EACCES على https://docs.npmjs.com/getting-started/fixing-npm-permissions .

واجهت هذه المشكلة بعد تثبيت جديد للعقدة باستخدام مثبت .pkg على OSX. توجد بعض الإجابات الرائعة هنا ، ولكن لم أجد رابطًا لـ npmjs.com حتى الآن.

الخيار 1: تغيير الإذن إلى الدليل الافتراضي لـ npm

  1. ابحث عن المسار إلى دليل npm:

    npm config get prefix
    

بالنسبة للعديد من الأنظمة ، سيكون هذا / usr / local .

تحذير : إذا كان المسار المعروض هو / usr فقط ، فانتقل إلى Option 2 .

  1. تغيير مالك أدلة npm إلى اسم المستخدم الحالي (اسم المستخدم الخاص بك!):

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

    هذا يغير أذونات المجلدات الفرعية المستخدمة من قبل npm وبعض الأدوات الأخرى ( lib / node_modules ، bin ، والمشاركة ).

الخيار 2: تغيير الدليل الافتراضي لـ npm إلى دليل آخر

هناك أوقات لا تريد فيها تغيير ملكية الدليل الافتراضي الذي تستخدمه npm (أي / usr ) حيث قد يتسبب ذلك في بعض المشكلات ، على سبيل المثال إذا كنت تشارك النظام مع مستخدمين آخرين.

بدلاً من ذلك ، يمكنك تكوين npm لاستخدام دليل مختلف تمامًا. في حالتنا ، سيكون هذا دليلاً مخفيًا في مجلدنا الرئيسي.

  1. جعل دليل للمنشآت العالمية:

    mkdir ~/.npm-global
    
  2. تكوين npm لاستخدام مسار الدليل الجديد:

    npm config set prefix '~/.npm-global'
    
  3. افتح أو أنشئ ملف ~ / .PRofile وأضف هذا السطر:

    export PATH=~/.npm-global/bin:$PATH
    
  4. مرة أخرى على سطر الأوامر ، قم بتحديث متغيرات النظام الخاص بك:

    source ~/.profile
    

سوف تكون هناك حاجة للأذونات التي استخدمتها عند تثبيت عقدة عند القيام بأشياء مثل الكتابة في دليل npm الخاص بك ( npm link npm install -g ، npm install -g ، وما إلى ذلك).

ربما قمت بتشغيل تثبيت العقدة مع أذونات الجذر ، ولهذا السبب يطلب منك تثبيت الحزمة العمومية أن تكون الجذر.

الحل 1: NVM

لا تخترق الأذونات ، ثبّت العقدة بالطريقة الصحيحة.

في جهاز التطوير ، لا يجب تثبيت عقدة وتشغيلها باستخدام أذونات الجذر ، وإلا npm link أشياء مثل npm link npm install -g ، npm install -g إلى نفس الأذونات.

يسمح لك NVM (Node Version Manager) بتثبيت عقدة بدون أذونات الجذر كما يسمح لك بتثبيت العديد من إصدارات عقدة للعب بسهولة معهم .. مثالي للتطوير.

  1. إلغاء تثبيت عقدة (قد يكون مطلوبا إذن الجذر). This قد يساعدك.
  2. ثم قم بتثبيت NVM باتباع التعليمات الموجودة NVM .
  3. تثبيت عقدة عبر NVM: nvm install node

الآن ، لم يعد npm link ، npm install -g يتطلب منك أن تكون الجذر.

تعديل: راجع أيضًا https://docs.npmjs.com/getting-started/fixing-npm-permissions

الحل 2: تثبيت الحزم عالمياً لمستخدم معين

لا تخترق الأذونات ، قم بتثبيت حزم npm على الصعيد العالمي بالطريقة الصحيحة.

إذا كنت في OSX أو Linux ، فيمكنك إنشاء دليل مخصص للمستخدم npm وعُقد npm الإعداد لمعرفة كيفية العثور على الحزم المثبتة عالميًا.

تحقق من github.com/sindresorhus/guides/blob/master/… للحصول على إرشادات خطوة بخطوة حول تثبيت وحدات npm على مستوى العالم بدون sudo.

انظر أيضًا: وثائق https://docs.npmjs.com/getting-started/fixing-npm-permissions .


في الواقع ، كنت أواجه نفس المشكلة أيضًا. كنت أدير أوبونتو. تنشأ مشكلة الألغام لأنني فقدت مفتاح عمومي الخاص بـ Ubuntu. حتى تحديث نظامي لم يكن يحدث. كان يعطي خطأ GPG. في هذه الحالة ، يمكنك استعادة مفتاحك باستخدام هذا الأمر:

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

بعد أن npm يعمل بشكل جيد!


في حالة sudo chown -R $(whoami) ~/.npm لم يعمل من أجلك ، أو كنت بحاجة إلى حل أوامر غير طرفية.

المشكلة هي أن حساب المستخدم الخاص بك ليس لديه إذن الكتابة إلى مجلد node_modules ، بحيث يمكنك القيام بما يلي

  1. افتح مكتشف واضغط على cmd + shift + g حيث سيفتح هذا الزر إلى المجلد مع عنوان url

  2. اكتب المسار التالي /usr/local/lib/node_modules واضغط على go

  3. انقر بزر الماوس الأيمن على مجلد node_modules واختر Get Info

  4. قم بالتمرير لأسفل إلى قسم sharing & permissions

  5. فتح لتكون قادرة على إجراء تغييرات.

  6. اضغط على + وأضف حساب المستخدم الخاص بك

  7. تأكد من اختيار القائمة المنسدلة Read & Write في الامتياز

الآن يجب أن تكون قادرًا على تثبيت الحزم بدون sudo ويجب حل مشكلات الأذونات


في نظام التشغيل Mac OS X ، عند التثبيت مع brew install npm Homebrew's ، يكون مسار التثبيت /usr/local/share/npm/ مع كلا من bin/ و lib/node_modules/ subfolders.

يجب أن يؤدي تشغيل هذا الأمر للتغيير إلى المالك إلى المستخدم الذي تم تسجيل دخوله حاليًا إلى إصلاحه جميعًا ، والسماح لك بتثبيت الحزم الآلية الافتراضية العالمية بدون استخدام sudo .

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

osx homebrew


كانت إجابةYves M. مشابهة جدًا لحللي. فيما يلي الأوامر التي استخدمتها ، والتي كانت مختلفة قليلاً عن نظيره.

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

ثم الاستعلام عن أحدث إصدار:

nvm ls-remote

ثم قم بتثبيت أحدث إصدار:

nvm install YOUR_VERSION_HERE

مثال

nvm install v5.8.0

كما لو أننا بحاجة إلى المزيد من الإجابات هنا ، ولكن على أي حال ..

يحتوي Sindre Sorus على دليل github.com/sindresorhus/guides/blob/master/… يحدد كيفية التثبيت بدون أي أذون:

هذه طريقة لتثبيت الحزم عالمياً لمستخدم معين.

  1. قم بإنشاء دليل للحزم العالمية الخاصة بك

    mkdir "${HOME}/.npm-packages"
    
  2. الرجوع إلى هذا الدليل للاستخدام المستقبلي في .bashrc / .zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. أشر إلى npm مكان تخزين الحزمة المثبتة عالميًا. في ملف $HOME/.npmrc الخاص بك أضف:

    prefix=${HOME}/.npm-packages
    
  4. تأكد من العقدة سوف تجد لهم. أضف ما يلي إلى .bashrc / .zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. تأكد من العثور على الثنائيات المثبتة والصفحات البشرية. أضف ما يلي إلى .bashrc / .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)"
    

تحقق من npm-g_nosudo لإجراء الخطوات أعلاه تلقائيًا

الخروج من github.com/sindresorhus/guides/blob/master/… للحصول على آخر التحديثات.


لقد واجهت مشكلة مماثلة في الوحدات النمطية للآلية الوقائية الوطنية لن تثبت على الصعيد العالمي دون sudo ، كانت المشكلة أنه عندما قمت بتثبيت عقدة فعلت ذلك مع sudo عبر chris / lea ppa repo .

كان الحل الخاص بي هو إزالة تثبيت العقدة وتثبيتها بهذه الطريقة:

تنزيل أحدث مصادر عقدة مستقرة من nodejs.org #in my case node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #uncompress sources

cd node-v0.10.20 #enter مجلد غير مضغوط

sudo chown $ USER -R / usr / local

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

PD: إذا كنت لا ترغب في تغيير ملكية المجلد / usr / local ، فيمكنك تثبيته في مكان تمتلكه بالفعل. تتمثل مشكلة هذا الأسلوب في ضرورة ربط مجلد التثبيت مع سطر الأوامر bash حتى نتمكن من استخدام أمر العقدة في وقت لاحق

mkdir ~ / opt

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

echo 'تصدير PATH = ~ / opt / bin: $ {PATH}' >> ~ / .bashrc #or ~ / .profile أو ~ / .bash_profile أو ~ / .zshenv بناءً على نظام التشغيل الحالي

مع أي من هذه الأساليب ، ستتمكن من القيام بما يلي دون استخدام sudo

npm install -g module_to_install


هذا هو الحل الذي استخدمته وعملته. حاولت استخدام whoami لم يعمل.

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

ثم

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

ثم

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


هذه هي الطريقة التي حللت بها المشكلة في Windows 8.1:

  • انتقل إلى تثبيت nodejs (عادةً C: \ Program Files \ nodejs)
  • انقر بزر الماوس الأيمن فوق مجلد node_modules وانتقل إلى الخصائص
  • انقر فوق علامة التبويب أمان والمتقدمة
  • في الجزء العلوي سترى "مالك: النظام" ، انقر فوق تغيير
  • أدخل المستخدم الذي تريد أذونات له وانقر فوق موافق
  • ضع علامة في المربع الموجود أسفل الإعدادات المتقدمة "استبدال كل إدخالات إذن كائن تابع بإدخالات الأذونات القابلة للتوريث من هذا الكائن" وانقر فوق "موافق"
  • هل ما npm تثبيت / تحديث ما تحتاجه

وجدت أنه إذا كنت فقط sudo -s "فإنه يبدأ فقط قذيفة مع أذونات الجذر كخطوة واحدة" ويعمل حقا بالنسبة لي. لا أعرف ما إذا كانت ممارسة جيدة أم لا.

اتمني ان يكون مفيدا.

المرجع: https://apple.stackexchange.com/posts/14423/revisions


يبدو لي أن أفضل خيار هو الخيار المقترح في وثائق npm ، وهو التحقق أولاً من تثبيت node_modules بشكل افتراضي عن طريق تشغيل npm config get prefix . إذا حصلت ، مثلما أفعل على Trusty ، /usr ، قد ترغب في تغييره إلى مجلد يمكنك امتلاكه بأمان دون العبث بالأشياء بالطريقة التي قمت بها.

للقيام بذلك ، قم باختيار أو إنشاء مجلد جديد في النظام الخاص بك. قد ترغب في الحصول عليها في دليل منزلك ، أو مثلي ، ضمن /usr/local للاتساق لأنني أيضًا مستخدم Mac (أفضّل ألا أحتاج إلى البحث في أماكن مختلفة اعتمادًا على الماكينة التي أكون فيها أمام). هناك سبب آخر جيد لفعل ذلك هو حقيقة أن المجلد /usr/local ربما يكون بالفعل في PATH الخاص بك (إلا إذا كنت ترغب في التعامل مع PATH الخاص بك) ولكن هناك احتمالات بأن مجلدك الذي تم إنشاؤه حديثًا ليس بحاجة إلى إضافته إلى PATH بنفسك على ملف .bash-profile أو .bashrc الخاص بك.

قصة قصيرة طويلة ، لقد قمت بتغيير الموقع الافتراضي للوحدات النمطية العالمية باستخدام npm config set prefix '/usr/local' ، تم إنشاء المجلد /usr/local/lib/node_modules (سيتم استخدامه بواسطة npm) وتغيير الأذونات للمجلدات مستخدمة من قبل npm باستخدام الأمر:

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

الآن يمكنك تثبيت أي وحدة على مستوى العالم بأمان. أتمنى أن يساعدك هذا!


يشير John Papa إلى التاريخ والمنطق وراء هذه المشكلة ويعطي حلًا ثابتًا :

خطوات جون بابا هي:

  1. استخدم الشراب لتثبيت العقدة بدون npm
  2. قم بتحديث ملف .bash_profile / .bashrc الخاص بك لإعلام npm والعقدة بمكان التثبيت والعثور على الحزم
  3. استخدم الشراب لتحديث العقدة و npm لتحديث نفسها

آمل أن يساعد هذا الفضول!


احترس!!! احترس!!! احترس!!!

chown أو chmod ليس هو الحل ، وذلك بسبب المخاطر الأمنية.

وبدلاً من ذلك ، قم بما يلي:

التحقق الأول ، حيث يشير npm إلى ، إذا اتصلت:

npm config get prefix

إذا تم إرجاع / usr ، فيمكنك القيام بما يلي:

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

هذا إنشاء npm-Direktory في "الدليل الرئيسي" الخاص بك و npm نقطة إليه.

للحصول على هذه التغييرات دائمة ، يجب عليك إضافة أمر التصدير إلى .bashrc:

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






sudo