Ошибки установки npm с ошибкой: ENOENT, chmod

128

Я пытаюсь глобально установить только что опубликованный модуль npm. Каждый раз, когда я пытаюсь установить из npm или из папки, я получаю эту ошибку.

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek"
npm ERR! cwd /home/giodamlio
npm ERR! node -v v0.10.6
npm ERR! npm -v 1.3.6
npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/giodamlio/npm-debug.log
npm ERR! not ok code 0

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

  • Обновить npm ( sudo npm install -g npm)
  • Очистить глобальный кеш npm ( sudo npm cache clear)
  • Очистить пользовательский кеш npm ( npm cache clear)

Я заметил, что ошибка связана с файлом, который я привязываю к пути, особенно когда npm пытался выполнить команду chmod. Это не должно быть проблемой, my lib/cli.jsимеет обычные разрешения, а npm имеет права суперпользователя во время этой установки.

Покопавшись в документах npm, я нашел вариант, который не позволял npm создавать ссылки на bin ( --no-bin-links), когда я пытался установить с ним, он работал нормально.

Так в чем же дело? Это какая-то странная ошибка, у которой пока нет решения?

Изменить: для справки, вот модуль, который я загрузил

giodamelio
источник
ваш пакет использует node-gyp? Я думаю, что это связано с вызовом no-bin-links.
jcollum 01
Нет, в модуле нет нативного кода. Вот источник модуля для справки.
giodamelio 01
1
Это --no-bin-linksпросто останавливает npm от символических ссылок файлов в binхэше package.json на путь при глобальной установке.
giodamelio
Ох, я определенно сталкивался с этим раньше, но я не могу вспомнить, почему ... дам тебе знать, если это придет мне в голову.
jcollum
@jcollum Спасибо, это действительно очень неприятно, я проверил все миллиард раз, но все еще не могу избавиться от ощущения, что пропустил что-то глупое простое. Или, может быть, это какая-то странная ошибка.
giodamelio

Ответы:

133

Хорошо, похоже, что NPM использует ваш .gitignoreкак основу для .npmignoreфайла и поэтому игнорирует /lib. Если вы добавите пустой .npmignoreфайл в корень вашего приложения, все должно работать.

[edit] - подробнее об этом поведении здесь: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

badsyntax
источник
Черт возьми, должно быть так. Это кажется немного запутанным. Сейчас не за компьютером, но через несколько часов попробую.
giodamelio 02
3
3 часа разочарования привели к одной строчке в моем .gitignore, которая пугала npm install -g. Безумный.
Брайан
2
'type NUL> .npmignore' для windows
Kabir
1
Начиная с npm @ 5, кеш npm самовосстанавливается от проблем с повреждением, и данные, извлеченные из кеша, гарантированно являются действительными. Если вы хотите убедиться, что все согласовано, используйте вместо этого npm cache verify.
Abhijeet
1
удалить файл package-lock.json
FennRussel
107

Я столкнулся с похожей проблемой,

npm cache clean

решил это.

Genjuro
источник
11
Я попробовал, npm cache verifyи это сработало. спасибо за подсказку.
Jaikrat
Начиная с npm @ 5, кеш npm самовосстанавливается от проблем с повреждением, и данные, извлеченные из кеша, гарантированно являются действительными. Если вы хотите убедиться, что все согласовано, используйте вместо этого npm cache verify. С другой стороны, если вы устраняете проблему с помощью установщика, вы можете npm install --cache /tmp/empty-cacheиспользовать временный кеш вместо того, чтобы уничтожать фактический.
Daniel ZA
9

Эта проблема как-то возникла у меня на Mac, когда я пытался запустить npm install -g bower. Это давало мне ряд ошибок из-за того, что я не мог найти такие вещи, как graceful-fs. Я не уверен, как я изначально установил npm, но похоже, что, возможно, он пришел с node с использованием homebrew. Я впервые побежал

brew uninstall node

Это удалило оба nodeи npmс моего пути. Оттуда я просто переустановил его

brew install node

Когда он завершился, у меня был nodeи npmмой путь, и я смог бежать

rm -rf ~/.npm
npm install -g bower

После этого беседка была успешно установлена.

Обновление формул пивоварения и установка обновлений, похоже, не помогли мне, я не уверен, почему. Удаление .npmпапки помогло другим людям, и я безуспешно пытался это сделать. На этот раз я сделал это на всякий случай. Также обратите внимание, что ни одно из следующих действий не решило проблему для меня, хотя это помогло другим:

npm cache clean
sudo npm cache clean
user1978019
источник
9

Я получал эту ошибку при установке npm, и добавление .npmignore не решило ее.

Ошибка: ENOENT, stat 'C: \ Users \ My-UserName \ AppData \ Roaming \ npm'

Я попытался перейти в указанную папку, но ее не было. Ошибка была исправлена, когда я создал папку npm в папке Roaming .

Это в Windows 8.1

Виджей Вепакомма
источник
4

У меня была такая же проблема, и я только что нашел обработку, не упомянутую здесь. Хотя я бы внес свой вклад в сообщество:

npm install -g myappне копировал binкаталог. Я обнаружил, что это произошло потому, что я не включил его filesв свойpackage.json

"files": [
  "lib",
  "bin" // this was missing
]
dthree
источник
Получил ту же проблему, и этот ответ был для меня единственным хорошим решением. Причина в том, что я получил filesключ package.jsonс некоторыми записями вроде index.jsи LICENSE, но не с binпапкой. Так что это работает, если filesключа нет вообще, или если есть filesключ И binпапка внутри .
Реми Бешерас,
Спасибо, это помогло мне оторваться. Как только вы указали, что каталог bin не был включен в файлы, я подумал: «О! Конечно!». Затем я вернулся к документации, чтобы посмотреть, не пропустил ли я это, и это не упоминается (по крайней мере, не в сообщении в блоге npm, которое я читал). По крайней мере, я не сумасшедший: P. Спасибо за помощь!
Крис Шмитц
4

Я получал аналогичную ошибку npm installпри локальной установке:

npm ERR! enoent ENOENT: no such file or directory, stat '[path/to/local/installation]/node_modules/grunt-contrib-jst'

Я не уверен, что было причиной ошибки, но я недавно установил пару новых модулей узла локально, обновил узел с помощью homebrew и запустил npm update -g.

Единственный способ решить проблему - полностью удалить локальный каталог node_modules и запустить его npm installснова:

cd [path/to/local/installation]
npm rm -rdf node_modules
npm install
g.carey
источник
4

У меня точно такая же проблема: ERR! enoent ENOENT: нет такого файла или каталога, chmod 'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv Я пробовал все вышеперечисленные решения, но не повезло. Я использовал бродячий ящик, а проект находился в общей папке. Проблемы, кажется, возникают только тогда, когда я перемещаю проект в другую не общую папку (с хостом), вуаля! задача решена. На случай, если другой человек тоже использовал бродягу

joaco1977
источник
Ты разбудил меня от кошмара, спасибо! У меня есть 2 дополнения: 1.) Прекратите использовать npm, используйте Yarn. 2.) Запустите npm с вашего HOST-компьютера, а не с виртуальной машины.
Флип Верноой
3

Я получил аналогичное сообщение об ошибке при попытке npm installустановить множество зависимостей. Оказывается, некоторые из них не могут быть установлены в Debian / Ubuntu, потому что они ожидают, что они /usr/bin/nodeбудут исполняемым файлом узла. Чтобы исправить, вам нужно сделать

sudo ln -s nodejs /usr/bin/node 

или еще лучше,

sudo apt-get install nodejs-legacy

Для получения дополнительной информации: https://stackoverflow.com/a/21171188/7581

itsadok
источник
3

Я столкнулся с аналогичным поведением после обновления до npm 6.1.0. Казалось, что однажды это сработало, но затем я попал в состояние с этой ошибкой при попытке установить пакет, который был указан путем в файловой системе:

npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename

Следующие вещи не помогли устранить проблему :

  • rm -rf node_modules
  • npm cache clean(дал npm ERR! As of npm@5, the npm cache self-heals.... use 'npm cache verify' instead.)
  • npm cache verify
  • rm -rf ~/.npm

Как я исправил проблему :

  • rm package-lock.json
Ян
источник
2

Я думаю, ваш скомпилированный кофейный скрипт отсутствует в опубликованном пакете npm. Попробуйте написать команду предварительной публикации .

дрейф
источник
Нет, папка lib была там, когда я ее опубликовал. Кроме того, я получаю ту же ошибку при попытке установить из локальной папки. Даже когда папка lib есть.
giodamelio 02
1
@giodamelio Я согласен с Райаном в этом. Ошибка говорит, takeapeek/lib/cmd.jsчто не существует. Несмотря на то, что папка lib может быть «там» при публикации, ее не будет «там» при установке через npm, если она не является частью репозитория или если вы не используете предварительную публикацию для ее создания.
badsyntax 02
2

В моем случае (множественный код ENOENT errno 34) проблема была связана с ~/.npm/доступом к каталогу. Внутри него было несколько подкаталогов с root:rootправами, которые вызывали проблемы, когда я выполнял команды как обычный пользователь (без sudo). Поэтому я сменил владельца всех подкаталогов и файлов внутри ~/.npm/каталога на моего локального пользователя и группу. Это сработало на моем Ubuntu (на Mac тоже должно работать).

$ sudo chown yourusername.yourgroupname ~/.npm/ -R

Вы должны знать свое имя пользователя, верно? Если нет, запустите $ whoamiи замените им имя своей группы, например:

$ sudo chown johnb.johnb ~/.npm/ -R

РЕДАКТИРОВАТЬ:

Тестовый пример :

Из моей локальной учетной записи /home/johnbя npm-глобально установил какой-то генератор yeoman, например:

$ sudo npm install -g generator-laravel

Природа проблемы :

Вышеупомянутое действие привело к установке некоторых зависимостей внутри ~/.npm/каталога, имеющих root:rootправо собственности (из-за sudo ...). Очевидно, что npm не запускается от имени локального пользователя (или впоследствии не меняет владение подкаталогами зависимостей) при извлечении зависимостей и записи их в подкаталог локального пользователя ~/.npm/. Пока npm будет так небрежно относиться к фундаментальным проблемам безопасности файловой системы unix, проблема будет повторяться.

Решение :

  1. Постоянно проверяйте, есть ли ~/.npm/подкаталоги с владельцем (и / или разрешениями), отличным от вашей локальной учетной записи, особенно когда вы устанавливаете или обновляете что-то с помощью sodo(root). Если это так, ~/.npm/рекурсивно измените право собственности на локального пользователя.

  2. Попросите npm, bower, grunt, ...сообщество решить эту проблему, как я описал выше.

скрепка
источник
2

Я получил эту ошибку при попытке установить плагин grunt. Я обнаружил, что у меня устаревшая версия npm, и ошибка исчезла после обновления npm до последней версии

npm install -g npm
Прабху Мурти
источник
1

Я перепробовал все, что нашел в сети ( npm cache clearи rm -rf ~/.npm), но, похоже, ничего не работает. Проблема была решена путем обновления узла (и npm) до последней версии. Попробуй это.

Никола М.
источник
1

В Windows у меня была аналогичная ошибка. Найдите и вставьте данные приложения и найдите строку npm.

Я заменил строку 'npm'(включая кавычки) 'npm.cmd'как в atlasboard\lib\package-dependency-manager.jsи atlasboard\lib\cli\commands.js. Это устранило проблему.

Винисиус Карвалью
источник
1

Та же ошибка при глобальной установке ( npm install -g mymodule) для пакета с несуществующим скриптом.

В package.json:

    ...
    "bin": {
      "module": "./bin/module"
    },
    ...

Но ./bin/module, как его назвали, не существовало modulejs.

рт.
источник
1
  1. Установите последнюю версию узла
  2. Запуск: очистка кеша npm
  3. Выполните: npm install cordova -g
Дилхан Джаятилаке
источник
1

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

LAdams87
источник
1

Будьте осторожны с недопустимыми значениями ключей "каталогов" и "файлов" в package.json.

Если вы начинаете с нового приложения и хотите начать с полностью пустого, вам нужно либо начать с полностью пустой папки, либо иметь в нем действительный файл package.json.

Если вы не хотите сначала создавать файл package.json, просто введите: npm i some_package

Пакет с именем «some_package» должен быть правильно установлен в новую подпапку «node_modules».

Если вы сначала создаете файл package.json, введите: npm init Сохраните все значения по умолчанию (просто нажав ENTER), вы должны получить действительный файл.

Должно получиться так:

{
  "name": "yourfoldername",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Обратите внимание, что отсутствуют следующие ключи: « каталоги », « репозиторий » и « файлы ». Похоже, что если вы используете неправильные значения для « каталогов » и / или « файлов », вы не сможете установить пакет. Оставив эти ключи, я решил проблему.

Также обратите внимание на ключ « main ». Он присутствует, но содержит недопустимое значение. Файла index.js пока не существует. Вы можете смело его удалить.

Теперь введите: npm i some_package и пакет с именем "some_package" должен быть правильно установлен в новую подпапку "node_modules".

RWC
источник
1

Пробовал почти все, а затем, наконец, это:

Просто удалите node_modules, затем запустите 'npm install'снова

Алекс Стивенс
источник
0

У меня была аналогичная проблема с другой причиной: yo nodeгенератор был добавлен "files": ["lib/"]в my, package.jsonи поскольку мой cli.jsбыл вне lib/каталога, он пропускался при публикации в npm.

(Проблема с Yeoman на https://github.com/yeoman/generator-node/issues/63 должна быть исправлена ​​в ближайшее время.)

Натан Фридли
источник
0

Я получал сообщение об ошибке "Ошибка: ENOENT, stat 'C: \ Users \ userName \ AppData \ Roaming \ npm'. Но такого каталога не было. Создал каталог, и установка npm начала работать

k.iyengar
источник
0

Недавно я обновился до узла 4.2.1 на машине с Windows 7 x64. При беге

npm install -g bower

У меня похожая ошибка:

npm ERR! enoent ENOENT: нет такого файла или каталога, откройте 'C: \ Users \ THE_USERNAME \ AppData \ Local \ Temp \ npm-THE_HASH'

Думая, что это связано с путем AppData, я поигрался с

npm config edit

и

npm config edit --global

чтобы изменить поля prefix, cache и tmp, но получил ту же ошибку с новыми путями:

npm ERR! enoent ENOENT: нет такого файла или каталога, откройте 'C: \ Users \ THE_USERNAME \ npm-temp \ npm-THE_HASH'

Все команды выполнялись от имени администратора, поэтому у меня были полные права.

Затем я подумал, что с существующими файлами есть какие-то проблемы, и запустил:

npm cache clean

Но получил ту же ошибку. Тем не менее, некоторые временные файлы все еще валялись. Удаление всех временных данных вручную с помощью cygwin наконец-то устранило проблему для меня:

rm -rf bower bower.cmd node_modules etc

Если у вас есть только Windows cmd, вы можете использовать что-то вроде

rmdir /S THE_TEMP_DIR

удалить все подкаталоги (хотя, если у вас есть глубоко вложенные зависимости узлов, это, как известно, проблематично)

Так что, возможно, есть некоторые проблемы с обновлением npm и зависанием версий bower или других пакетов. В моем случае это казалось проблемой

Эндрю Джонстон
источник
0

При установке ionic я получил ошибку ниже

Ошибка 115648 enoent ENOENT: нет такого файла или каталога, переименуйте 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules.staging \ ansi-b11f0c4b' -> 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules \ ионной \ node_modules \ Cordova Пб \ node_modules \ ANSI»

По ansiэтому пути не было папки с именем . Я создал его там, и он правильно установил.

Виджай Мишра
источник
0

Если вы пытались выполнить установку в каталоге вашего проекта с этой ошибкой, вы можете попробовать:

rm -rf ./node_modules
npm cache clear
npm remove sails

тогда вы можете попробовать "сделать установку"

Если у вас есть «npm ERR! Enoent ENOENT: no such file or directory, chmod '... / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'», то вы можете попробовать установить какая-то предыдущая версия js-beautify, дополнительные комментарии: https://github.com/beautify-web/js-beautify/issues/1247

"dependencies": {
  ...
  "js-beautify": "1.6.14"
  ...
}

и выполните команду make install. Кажется, это работает в том случае, если у вас нет других зависимостей, требующих более высокую версию (1.7.0), в этом случае вы должны понизить версию этих пакетов также в packages.json.

или

Alex
источник
0

У меня ничего из вышеперечисленного не сработало. Но заработало yarn install, потом npm iзаработало. Не уверен, какая пряжа исправлена, но решение быстрое и простое!

Тодд Хейл
источник
0

Сначала сделай

 npm rm -rdf node_modules

тогда делай

npm install

После этого установите все файлы, которые хотите добавить.

Шреяш Шетти
источник
0

Была аналогичная ошибка с npm в контейнере докеров для веб-пакета. Проблема была вызвана аргументом командной строки --user для docker run, потому что данный пользователь и группа каким-то образом испортили права на локальном томе. Надеюсь, это кому-то поможет :)

Хайо
источник
-3
Creating a new React app in C:\Users\CM\Downloads\react\github-profile.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...

npm ERR! path C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 

v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335b1
0893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806

npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall lstat
npm ERR! Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6
5545008a3cad93d00f806'
npm ERR! { [Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1f 
a335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6554500
8a3cad93d00f806']

npm ERR! cause:
npm ERR! { Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1
fa335b10893d67f7339e4 
af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806'
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 


npm ERR! stack:
npm ERR! 'Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015
eec65545008a3cad93d00f806'',
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335
b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93
d00f806',
npm ERR! parent: 'postcss-image-set-function' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a
text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double- 
check thenpm ERR! permissions of the file and its containing directories, or 
try  running

npm ERR! the command again as root/Administrator (though this is not 
recommended).
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\CM\AppData\Roaming\npm-cache_logs\2019-03-22T10_
27_19_722Z-debug.log


Aborting installation.
npm install --save --save-exact --loglevel error react react-dom react- 
scripts   has failed.

Deleting generated file... node_modules
Deleting generated file... package.json
Deleting GitHub-profile/ from C:\Users\CM\Downloads\reactDone.``

У меня была аналогичная ошибка, но я много раз пытался запустить команду create-response-app, и, наконец, она была создана, это была проблема с моим подключением к Интернету. проверьте ваше интернет-соединение

Чандра Мохан
источник
-16

Пожалуйста, попробуйте это

SET HTTP_PROXY=<proxy_name>

Тогда попробуйте эту команду. Она будет работать

user3030233
источник
где мне это поставить?
eduardosufan