Ошибка 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