Не вдалося встановити Npm з "не може працювати в wd"


153

Я намагаюся налаштувати своє середовище вузла на новий екземпляр Ubuntu 12.04, з Node 0.8.14 вже встановлений, але я зіткнувся з проблемами при спробі запуску npm install. Отже, коли я намагаюся npm install, він говорить, що мені потрібно запустити його як root або адміністратор:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Але коли спробуйте запустити його як судо, він говорить наступне:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

У моєму пакеті.json він містить такі сценарії:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Решта недоліків дійсні, оскільки я встановив це все на своїй машині (Mac) Хтось має поняття, чому це відбувається?

Відповіді:


231

Документація говорить (також тут ):

Якщо npm викликали привілеї root, то він змінить uid на обліковий запис користувача або uid, визначений userconfig, для якого за замовчуванням nobody. Встановіть unsafe-permпрапор для запуску скриптів з правами root.

Ваші варіанти:

  1. Виконати npm installз --unsafe-permпрапором:

    [sudo] npm install --unsafe-perm
  2. Додайте unsafe-permпрапор до свого package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. Не використовуйте preinstallскрипт для встановлення глобальних модулів, встановлюйте їх окремо, а потім запускайте звичайні npm installбез права доступу root:

    sudo npm install -g coffee-script node-gyp
    npm install
    

Пов'язані :


2
Вибачте, я цього не бачив досі. Я раніше спробував «небезпечну», але це теж не вийшло. Проблема все ще існує
EH

10
Це працює для мене: sudo npm install --unsafe-permпроте sudo npm installне так, хоча я додав "unsafe-perm":trueу package.json ... Не знаю, чому
Дмитро Пашкевич

8
Додавання його до властивості "config" у package.json насправді встановлює "npm_package_config_unsafe_perm", тому варіант 2 не працює. Див: stackoverflow.com/questions/28763958 / ...
justmoon

"небезпечна завіса": справді не вдалося і для мене. Соромно, що він не повідомив про помилку та контекст (включаючи свою непотрібну зміну) у повідомленні про помилку, замість того, щоб скидати причину із існування та надавати щось кричуще, дивовижне та вороже.
android.weasel

Хоча npm install --unsafe-permдля мене це працює, я намагався слідкувати за наслідками щодо зміни userконфігурації за замовчуванням . Так я npm set user my_userі зробив npm set group my_group, який додає відповідні записи у .npmrcфайл користувача root . Але проблема полягає в тому, що node_modulesсама папка та її підпапки все ще належать root, так що це не допомагає. Я не міг зрозуміти жодного способу, щоб вони не були корінними.
Фульв

53

Єдине, що працювало для мене - додавання .npmrcфайлу, що містить:

unsafe-perm = true

Додавання тієї ж конфігурації package.jsonне мало жодного ефекту.


36
в докер:RUN npm set unsafe-perm true
Олександр Міллс

якщо ви використовуєте WSL, просто введіть встановити небезпечну правду. Це допоможе вам
Стас Панюков

26

Я зіткнувся з тією ж проблемою, коли намагався опублікувати свій додаток nodejs на приватному сервері під керуванням CentO за допомогою root користувача. Ця ж помилка запускається "postinstall": "./node_modules/bower/bin/bower install" у моєму файлі package.json, тому єдиним рішенням, яке працювало для мене, є використання обох варіантів, щоб уникнути помилки:

1: використання --allow-root опція для команди установки bower

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: використання --unsafe-perm варіант для команди npm install

npm install --unsafe-perm

12

ОП тут, я дізнався набагато більше про вузол, оскільки я вперше задав це питання. Хоча відповідь Дмитра була дуже корисною, але в кінцевому підсумку це зробило для мене - встановити вузол з правильними дозволами.

Я настійно рекомендую не встановлювати вузол за допомогою будь-яких менеджерів пакетів, а скоріше скомпілювати його так, щоб він знаходився у локальному каталозі з нормальними дозволами.

У цій статті є чітка покрокова інструкція, як це зробити:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04


2

Я це виправив, змінивши права власності /usr/localі ~/Users/user-nameось так:

sudo chown -R my_name /usr/local

Це дозволило мені робити все без sudo

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.