2 руководства по gulp говорят, что мне нужно сначала установить gulp глобально (с флагом -g), а затем еще раз локально. Зачем мне это?
javascript
gulp
Степан Суворов
источник
источник
Ответы:
При глобальной установке инструмента он должен использоваться пользователем в качестве утилиты командной строки где угодно, в том числе за пределами узловых проектов. Глобальные установки для проекта узла плохи, потому что они усложняют развертывание.
нпм 5.2+
npx
Утилита в комплекте сnpm
5.2
решает эту проблему. С его помощью вы можете вызывать локально установленные утилиты, такие как глобально установленные утилиты (но вы должны начать команду сnpx
). Например, если вы хотите вызвать локально установленныйeslint
, вы можете сделать:нпм <5,2
Когда используется в
script
поле вашего package.json,npm
поискnode_modules
инструмент, а также глобально установленные модули, поэтому достаточно локальной установки.Итак, если вы довольны (в вашем package.json):
и т. д. и работает с
npm run test
далее, и вам вообще не нужна глобальная установка.Оба метода полезны для настройки людей с вашим проектом, так
sudo
как не нужны. Это также означает, чтоgulp
будет обновлено, когда версия будет добавлена в package.json, поэтому все будут использовать одну и ту же версию gulp при разработке с вашим проектом.Приложение:
Похоже, что глоток имеет несколько необычное поведение при глобальном использовании. При использовании в качестве глобальной установки gulp ищет локально установленную gulp для передачи управления. Поэтому для глобальной установки gulp требуется локальная установка gulp. Ответ выше все еще стоит, хотя. Локальные установки всегда предпочтительнее глобальных.
источник
./node_modules/.bin/gulp
.gulp
иcoffee
поэтому команды работают из корня проекта моего узла (например,alias gulp="node_modules/.bin/gulp"
). Таким образом, команды просты в использовании, если это необходимо, и глобальные / локальные конфликты версий не возникают.gulp
, выдается следующее сообщение об ошибкеLocal gulp not found in ...
. Насколько я понимаю, он должен сначала посмотреть на локальные node_modules, а если он не найден, то должен посмотреть на глобально установленные модули, не так ли? Спасибо!TLDR; Вот почему :
По сути, когда вы устанавливаете
gulp
локально, сценария нет в вашем,PATH
и вы не можете просто напечататьgulp
и ожидать, что оболочка найдет команду. Устанавливая его глобально,gulp
скрипт попадает в ваш,PATH
потому что глобальныйnode/bin/
каталог, каталог, скорее всего, находится на вашем пути.Однако, чтобы уважать ваши локальные зависимости,
gulp
используйте вашу локально установленную версию для запускаgulpfile.js
.источник
gulp
пакет необходим для установкиnode_modules/.bin/gulp
в пути. Хранилище дешево, но выбрасывать МБ для симуляции символической ссылки - чистая небрежность ИМО.Вы можете связать глобально установленный
gulp
локально систочник
npm link
.Вопрос « Зачем нам нужно устанавливать gulp глобально и локально? » Можно разбить на следующие два вопроса:
Зачем мне устанавливать gulp локально, если я уже установил его глобально?
Зачем мне нужно устанавливать gulp глобально, если я уже установил его локально?
Несколько других дали отличные ответы на эти вопросы в отдельности, но я подумал, что было бы полезно объединить информацию в единый ответ.
Зачем мне устанавливать gulp локально, если я уже установил его глобально?
Обоснование установки gulp локально состоит из нескольких причин:
Зачем мне нужно устанавливать gulp глобально, если я уже установил его локально?
Чтобы избежать локальной установки, вы можете использовать
npm link [package]
, но команда link, а такжеinstall --global
команда, кажется, не поддерживает эту--save-dev
опцию, что означает, что не существует простого способа установить gulp глобально, а затем легко добавить любую версию для ваш локальный файл package.json.В конечном счете, я считаю, что более разумно иметь возможность использовать глобальные модули, чтобы избежать дублирования установки общих инструментов во всех ваших проектах, особенно в случае таких инструментов разработки, как grunt, gulp, jshint и т. Д. К сожалению, это кажется, что вы в конечном итоге немного сражаетесь с инструментами, когда идете против зерна.
источник
Технически вам не нужно устанавливать его глобально, если
node_modules
папка в вашей локальной установке находится в вашемPATH
. Обычно это не очень хорошая идея.В качестве альтернативы, если
npm test
ссылки,gulp
то вы можете просто набратьnpm test
и он будет запускать локальный глоток.Я никогда не устанавливал глоток глобально - я думаю, что это плохая форма.
источник
Я не уверен, была ли наша проблема напрямую связана с установкой gulp только локально. Но нам пришлось самим устанавливать кучу зависимостей. Это привело к созданию «огромного» package.json, и мы не уверены, действительно ли это хорошая идея установить gulp только локально. Мы должны были сделать это из-за нашей среды сборки. Но я бы не советовал устанавливать gulp не в глобальном масштабе, если это не является абсолютно необходимым. Мы столкнулись с похожими проблемами, описанными ниже. блоге
Ни одна из этих проблем не возникает ни у одного из наших разработчиков на своих локальных машинах, потому что все они установлены глобально. В системе сборки у нас были описанные проблемы. Если кому-то интересно, я мог бы глубже погрузиться в этот вопрос. Но сейчас я просто хотел упомянуть, что это не простой способ установить gulp только локально.
источник
Просто потому, что я не видел этого здесь, если вы работаете в MacOS или Linux, я предлагаю вам добавить это в ваш PATH (в вашем bashrc и т. Д.):
С помощью этой записи относительного пути, если вы находитесь в корневой папке любого проекта узла, вы можете запустить любой инструмент командной строки (eslint, gulp и т. Д. И т. Д.), Не беспокоясь о «глобальных установках» или
npm run
т. Д.Как только я это сделал, я никогда не устанавливал модуль глобально.
источник