Ошибка при установке «gulp-cli» из «npm» 1: предупреждения, философия Unix, зависимости, es5-ext: ilyachalov — LiveJournal
Я решил попробовать поработать с менеджером задач «Gulp». Тут подробнее про эту программу:Википедия: https://ru.wikipedia.org/wiki/Gulp
Официальный сайт: https://gulpjs.com
Вот тут инструкция по установке «Gulp»:
https://gulpjs.com/docs/en/getting-started/quick-start
Программа «Gulp» написана на языке JavaScript, поэтому для ее работы требуется предварительно установленная среда выполнения «Node.js» (в том числе входящие в нее менеджер пакетов «npm» и утилита «npx»). Если устанавливать среду выполнения «Node.js», скачав дистрибутив с официального сайта этой среды выполнения, то менеджер пакетов «npm» и утилита «npx» будут установлены вместе со средой выполнения «Node.js» автоматически. У меня всё это уже давно сделано, про это у меня был отдельный пост.
По вышеуказанной инструкции сначала следует установить глобально пакет «gulp-cli» (утилита командной строки для работы с программой «Gulp»), а затем следует установить локально (в папку проекта) сам пакет «gulp».
Вот команда, которую следует вводить в командной строке, для установки глобально пакета «gulp-cli» (местоположение при запуске команды не имеет значения, так как речь идет об установке пакета глобально):
> npm install --global gulp-cli
При установке пакета глобально он устанавливается у меня в следующую папку (мой компьютер работает под управлением операционной системы «Windows 10 Pro»):
C:\Users\Илья\AppData\Roaming\npm\
Вот что у меня получилось в ходе установки:
На вышеприведенной иллюстрации видно, что выскочила ошибка, а пакет не установился.
Начало разбора ошибки
Сначала мне тут было ничего не понятно (через сутки я уже понимал в этом тексте каждую буковку).
Первые четыре строки после запуска — это лишь предупреждения, они не прекращают установку пакета и не являются причиной последовавшей ошибки. Об этом свидетельствует пометка «WARN» (сокращение от английского слова «warning», которое по-русски значит «предупреждение») в начале каждой из этих строк.
Вообще менеджер пакетов «npm» при установке пакета «gulp-cli» выполняет больше тысячи разных действий, но не о каждом из них остается сообщение в консоли. Все сообщения о действиях менеджера пакетов «npm» фиксируются в лог-файле. Лог-файлы в данном случае сохраняются у меня в следующую папку:
C:\Users\Илья\AppData\Local\npm-cache\_logs\
На вышеуказанной иллюстрации в конце есть ссылка на нужный лог-файл и его местонахождение.
Почему менеджер пакетов «npm» выполняет больше тысячи действий? Дело в том, что пакет «gulp-cli» имеет огромное дерево зависимостей от других пакетов. Поэтому, чтобы пакет «gulp-cli» работал, сначала должны быть установлены пакеты, от которых он зависит. Эти пакеты можно просмотреть тут:
https://www.npmjs.com/package/gulp-cli?activeTab=dependencies
Там указано всего 18 пакетов. Однако, каждый из этих 18 пакетов тоже зависит от ряда других пакетов. Поэтому в итоге для работы пакета «gulp-cli» должны быть установлены не только эти 18 пакетов, а гораздо больше.
Так устроено сообщество программ с открытым исходным кодом на языке JavaScript. (Сообщества программ с открытым исходным кодом на других языках программирования устроены примерно так же.) Такая система работы, когда вы используете для своей программы множество программ других программистов, родилась из так называемой «философии Unix», сформулированной в конце 70-х годов прошлого века. Два принципа из трех «философии Unix» гласят: 1) пишите программы, которые делают что-то одно, но делают это хорошо; 2) пишите программы, которые работали бы вместе. Эти принципы много критикуют, но пока что на них стоит и работает вся система пакетов, получаемых через менеджер пакетов «npm» (или альтернативные менеджеры пакетов).
Таким образом, так как программа (пакет) зависит от множества других программ, то бывают случаи, когда авторы каких-то пакетов из дерева зависимостей нашего пакета перестают поддерживать свои пакеты или вообще вставляют в свои пакеты вредоносный код. Организация «npm» («npm» — это не только менеджер пакетов, но еще это сайт, база данных с пакетами и организация, следящая за работой сайта и базы данных) отслеживает «устаревающие» пакеты и помечает их, из-за чего при установке пакета (как в нашем случае) выскакивают предупреждения об этом. Пользователь тут ничего не может сделать. Это задача авторов пакета — подобрать замены «устаревшим» пакетам. Однако, авторы пакетов частенько игнорируют эти сообщения и не заменяют «устаревшие» пакеты. В принципе, это не так важно, пока пакет работает без ошибок.
Итак, игнорируем предупреждения и переходим к следующей строке:
npm ERR! code 1
Хоть слова «code» на иллюстрации не видно, но оно там есть. Думаю, в данном случае цвет этого слова совпал с цветом фона консоли, поэтому его и не видно. (В данном случае на вышеприведенной иллюстрации показана работа в программе «Windows Powershell», но я пробовал использовать командную строку «cmd.exe» и командную строку «Git Bush», которую получил при установке системы управления версиями «Git», в них это слово видно, потому что там фон по умолчанию используется черный).
Многие носятся по интернетам с вопросом «Как исправить ошибку npm ERR! code 1?». Вопрос смешной (хотя я тоже это делал, так что смеюсь и над собой), потому что, как я понимаю, данное сообщение ничего не значит кроме того, что произошла ошибка.
О самой ошибке речь идет ниже этой строки. Поэтому универсального решения по исправлению данной ошибки не может существовать. Нужно читать ниже и уже, руководствуясь изложенным там, предпринимать действия по исправлению ошибки.Ниже идет следующее:
npm ERR! path C:\Users\Илья\AppData\Roaming\npm\node_modules\gulp-cli\node_modules\es5-ext
Тут показан путь, куда устанавливаются пакеты, от которых зависит пакет «gulp-cli». Видно, что ошибка произошла при установке пакета «es5-ext». Вообще, в ходе установки менеджер пакетов «npm» создает все вышеуказанные папки, но при ошибке (как в данном случае) удаляет их. Поэтому после установки с ошибкой в следующей папке:
C:\Users\Илья\AppData\Roaming\npm\вы не найдете ничего, кроме нескольких маленьких файлов с простыми скриптами.
Пакет «es5-ext» некоторое время назад был на слуху в связи с протестной позицией его автора. Поэтому я при виде этого пакета немного насторожился.
Продолжение следует.
ubuntu — Какие версии Node.
js и npm совместимы с gulp 3.9.1?Задавать вопрос
спросил
Изменено 10 месяцев назад
Просмотрено 7к раз
У меня Node v14.19.0, NPM v6.14.16 и gulp CLI версии 2.3.0 вместе с локальной версией 3.9.1, установленной на моем компьютере (ОС — Ubuntu 22.04).
Проблема в том, что когда я запускаю любую команду gulp, я получаю эту ошибку
ReferenceError: primordials не определен в fs.js: 40: 5 в req_ (/home/opera/Desktop/my-site/public/node_modules/natives/index.js:143:24) в Object.req [по требованию] (/home/opera/Desktop/my-site/public/node_modules/natives/index.js:55:10) в Object.(/home/opera/Desktop/my-site/public/node_modules/vinyl-fs/node_modules/graceful-fs/fs. js:1:37) в Module._compile (внутренний/модули/cjs/loader.js:1085:14) в Object.Module._extensions..js (внутренние/модули/cjs/loader.js:1114:10) в Module.load(internal/modules/cjs/loader.js:950:32) в Function.Module._load (internal/modules/cjs/loader.js:790:12) в Module.require (внутренний/модули/cjs/loader.js:974:19) при необходимости (внутренние/модули/cjs/helpers.js:101:18)
Изучив несколько ответов и попробовав предоставленные решения, я нашел решение, которое решает указанную выше проблему, но, к сожалению, вызывает другую ошибку.
Решение, которое сработало, — это обновление версии gulp, но оно связано с другой проблемой, и, похоже, это некоторые изменения в версии v4.
Какая именно версия узла и npm хорошо работает с gulp 3.9.1?
- ubuntu
- npm
- sass
- gulp
Gulp 3.9.1 будет работать с Node 8 (последний узел 8 8.17.0) и ничего новее. Это мертвая и небезопасная версия узла. Как и проект gulp в целом (последний релиз в 2019 году). Я мог бы понять, является ли это устаревшим проектом, но его использование в новых проектах должно преследоваться по закону (примечание: это только мое личное мнение). Если вы вынуждены использовать его, и у вас уже установлена другая версия узла, я рекомендую использовать nvm для управления несколькими версиями узлов в вашей среде.
1Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя адрес электронной почты и парольОпубликовать как гость
Электронная почтаТребуется, но не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
NPM, Gulp и The Naughty Global Package
Meta TL;DR
Использование --force
помогло бы мне 🤷♀️
TL;DR
Существует пакет NPM с именем glu p-cli
и при попытке скачать gulp-cli
все может немного запутаться, так как создатели
также экспортируют команду bin под названием gulp
и создайте SYMLINK на то место, куда должен перейти настоящий gulp-cli
. Это проявляется в том, что настоящий gulp-cli
невозможно установить, потому что что-то уже имеет SYMLINK для /usr/local/bin/gulp
Недавно я сделал для себя небольшую веб-страницу (matthewcale.com), и это происходит очень хорошо, я бы сказал. Я использую Pug (разметка), Stylus (стили) и Surge (хостинг), а также несколько изящных CSS-анимаций, написанных очень умными людьми со всей сети. Есть невероятные люди, которые заставили меня почувствовать, что я программирую в 4000 году.
На данный момент все, что я делаю, выполняется с помощью сценариев NPM, и все делается. Это, однако, немного утомительно, и я хотел бы использовать средство запуска задач, чтобы все действительно сверкало.
Существует множество исполнителей задач и упаковщиков. Мне лично нравится уровень контроля, который я получаю с помощью такого инструмента, как Gulp, и хотя я давно им не пользовался, я до сих пор с любовью вспоминаю его.
Я посетил их домашнюю страницу и обнаружил, что с тех пор, как я перестал использовать его для своей обычной жизни разработчиков, они немного изменили его, и теперь пользователю предлагается установить локальный инструмент запуска задач и глобальный инструмент CLI. Не волнуйся, npm i -g gulp-cli
на помощь. Дох! Что случилось?
mbp-mcale:~ matt.cale$ npm i -g gulp-cli нпм ОШИБКА! код ЕСУЩЕСТВУЕТ нпм ОШИБКА! символическая ссылка системного вызова нпм ОШИБКА! путь . ./lib/node_modules/gulp-cli/bin/gulp.js нпм ОШИБКА! место назначения /USR/местные/бен/глоток нпм ОШИБКА! ошибка -17 нпм ОШИБКА! EEXIST: файл уже существует, символическая ссылка '../lib/node_modules/gulp-cli/bin/gulp.js' -> '/usr/local/bin/gulp' нпм ОШИБКА! Файл существует: /usr/local/bin/gulp нпм ОШИБКА! Удалите существующий файл и повторите попытку или запустите npm. нпм ОШИБКА! с --force для безрассудной перезаписи файлов.Войти в полноэкранный режимВыйти из полноэкранного режима
🤔 — Ну и что это теперь? Что-то еще там уже есть? Ну ничего, удалю!
mbp-mcale:~ matt.cale$ npm uninstall -g gulp обновлено за 0,021 с mbp-mcale:~ matt.cale$ npm uninstall -g gulp-cli обновлено за 0,021 сВойти в полноэкранный режимВыйти из полноэкранного режима
Попробуем еще раз! Дох! Та же ошибка? Какого черта?
трещины суставов и шеи
Давайте разберемся! в Googles/Stackoverflows!
Googles: "EEXIST: файл уже существует, символическая ссылка"
Честно говоря, немного провал, у одного благонамеренного джентльмена была другая проблема, и его решение заключалось в простом удалении элементов из package.