2016-04-14 1 views
1

У меня возникла проблема с NPM, где, похоже, обнаруживается конфликт между существующим файлом & символической ссылкой с тем же именем. Я не вижу никаких символических ссылок при запуске ls -l из корневой папки моего проекта. Как мне понять, что происходит с NPM &, выпрямите этот конфликт?Как исправить конфликт npm для существующих файлов и символических ссылок?

Сервер непрерывной интеграции построен: Node.js 4.4.3 = последняя сборка LTS.

Ящик localhost Node 5.x переключается на использование предварительно созданных phantomjs из-за этого предупреждения ... так что обновление версии сервера Node 4.4.3 -> 5.10.1 не является проблемой, ни правильное исправление :

npm WARN deprecated [email protected]: Package renamed to phantomjs-prebuilt. Please update 'phantomjs' package references to 'phantomjs-prebuilt' 

Я не имею ни из них в каком-либо из моих * .js коды, так что я не знаю, где это время требуется от и почему:

require("phantomjs") 
require("phantomjs-prebuilt") 

Поиска этого фраза на Google & SO, не произвели достаточно полезного результата тс, чтобы решить мою проблему:

"npm ERR! EEXIST: file already exists, symlink" 

Вот что я уже пробовал работает:

npm uninstall -g phantomjs 
npm WARN not installed in /.../.nvm/versions/node/v4/lib/node_modules: "phantomjs" 

rm -rf node_modules // to delete that folder 
npm install 

npm ERR! EEXIST: file already exists, symlink '../phantomjs-prebuilt/bin/phantomjs' -> '/.../node_modules/.bin/phantomjs' 
File exists: ../phantomjs-prebuilt/bin/phantomjs 
Move it away, and try again. 

скриншот того, что эта ошибка выглядит как был найден в Интернете с помощью Google. Прокрутите страницу вниз до CI server's code example. (Примечание: Это кто-то скриншот, но он похож на мой.)

Использование npm list или npm ls показывает phantomjs установлен:

├── [email protected] 

Использование npm ls -g показывает пустой список. Я предполагаю, что это означает, что в глобальную область не установлены никакие пакеты, ни символические ссылки.

Я попытался удалить phantomjs с помощью:

npm uninstall -g phantomjs 
npm WARN not installed in /.../.nvm/versions/node/v4/lib/node_modules: "phantomjs" 

Я также попытался использовать идею wilmore «s из его ответа на этот вопрос: Homebrew - repeated “linking” bug. What is the underlying issue here?

brew link --overwrite phantomjs 
Warning: Already linked: /usr/local/homebrew/Cellar/phantomjs/2.1.1 
To relink: brew unlink phantomjs && brew link phantomjs 

Это привело меня, чтобы выбрать 1-й вариант из этой последней строки:

brew unlink phantomjs 
Unlinking /usr/local/homebrew/Cellar/phantomjs/2.1.1... 2 symlinks removed 

Когда я повторно бежать:

npm install 

Он по-прежнему спотыкается этой ошибка:

npm ERR! EEXIST: file already exists, symlink '../phantomjs-prebuilt/bin/phantomjs' -> '/.../node_modules/.bin/phantomjs' 
File exists: ../phantomjs-prebuilt/bin/phantomjs 
Move it away, and try again. 

Как отлаживать симлинка далее & исправить это npm install конфликта между существующими файлами & Symlinks?

ответ

3

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

Я просто удалил оба из моего файла package.json &, а затем повторно запустил npm install, чтобы узнать, что произойдет. Затем, проверяя их на сервере CI, я мог видеть, что он делает. Мне пришлось повторно добавить первую строку «phantomjs», чтобы сервер CI прошел тесты. Это была строка «phantomjs-prebuilt», которую нужно было удалить.

Комментарии объясняют, которые должны быть использованы с 5.x версии Node.js 4.x &:

"phantomjs": "^2.1.3", // Leave this in for Node 4.x LTS, remove it with 5.x+ 
"phantomjs-prebuilt": "^2.1.7", // Removed this with 4.x LTS, but use it with 5.x+ 

Вот что установил сервер CI & позволило тесты, чтобы пройти! :)

Первоначально, я использовал Node 5.6.0 (установленный февраль 2016) & пытались обновить некоторые задачи Gulp для работы с существующим сервером NTS 4.4.3 LTS CI.

Глоток постоянно жаловались на phantomJS при использовании 5.6.0, так что я установил как phantomjs & phantomjs-prebuilt с --save-dev, чтобы получить его, чтобы остановить причиной проблем. Затем понижение с Node 5.6.0 до 4.4.3 LTS для отладки CI-сервера приведет к выбросу ошибки symlinks (упомянутой в моем вопросе выше).

Так что если кто-то еще столкнется с этой проблемой npm ERR! EEXIST: в будущем, попробуйте удалить все ссылки на модуль npm, о котором говорит ошибка, из файла package.json. Затем повторно добавьте их 1 на 1, если ваш сервер CI требует их.

Симлинк будет существовать где-то в папке/node_modules /. Моя/node_modules/папка имеет 885 подпапок! Не было никакого способа, чтобы я вошел во всех них, чтобы попытаться выяснить, что не так с символическими ссылками на более низком уровне.

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