Ошибка Npm с "не может работать в wd"

Я пытаюсь создать среду node, настроенную на новом экземпляре Ubuntu 12.04, с уже установленным node 0.8.14, но я столкнулся с проблемами при попытке запустить npm install. Поэтому, когда я пытаюсь npm install, он говорит, что мне нужно запустить его как root или adminisrator:

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.

Но когда вы пытаетесь запустить его как sudo, он говорит следующее:

npm WARN cannot run in wd [email protected] npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

В моем package.json он содержит следующие скрипты:

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

Остальные девятизависимости действительны, так как я устанавливаю все это прямо на своей собственной машине (Mac) Кто-нибудь знает, почему это происходит?

Ответ 1

OP здесь, я узнал намного больше о node, так как я впервые задал этот вопрос. Хотя ответ Дмитрия был очень полезным, в конечном итоге это для меня было установить node с правильными разрешениями.

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

В этой статье дается очень четкая пошаговая инструкция о том, как это сделать:

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

Ответ 2

документация говорит (также здесь):

Если npm был вызван с правами root, тогда он изменит uid на учетную запись пользователя или uid, указанную в конфигурации user, которая по умолчанию равна nobody. Установите флаг unsafe-perm для запуска скриптов с привилегиями root.

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

  • Запустите npm install с флагом --unsafe-perm:

    [sudo] npm install --unsafe-perm
    
  • Добавьте флаг unsafe-perm в свой package.json:

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

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

Похожие

Ответ 3

У меня возникла такая же проблема при попытке опубликовать приложение nodejs на частном сервере, на котором запущены CentOs с использованием пользователя 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

npm install --unsafe-perm

Ответ 4

Я исправил это, изменив права собственности на /usr/local и ~/Users/user-name следующим образом:

sudo chown -R my_name /usr/local

Это позволило мне сделать все без sudo