2 руководства по gulp говорят, что мне нужно сначала установить gulp глобально (с флагом -g), а затем еще раз локально. Зачем мне это?
2 руководства по gulp говорят, что мне нужно сначала установить gulp глобально (с флагом -g), а затем еще раз локально. Зачем мне это?
Ответы:
При глобальной установке инструмента он должен использоваться пользователем в качестве утилиты командной строки где угодно, в том числе за пределами узловых проектов. Глобальные установки для проекта узла плохи, потому что они усложняют развертывание.
npx
Утилита в комплекте с npm
5.2
решает эту проблему. С его помощью вы можете вызывать локально установленные утилиты, такие как глобально установленные утилиты (но вы должны начать команду с npx
). Например, если вы хотите вызвать локально установленный eslint
, вы можете сделать:
npx eslint .
Когда используется в script
поле вашего package.json, npm
поискnode_modules
инструмент, а также глобально установленные модули, поэтому достаточно локальной установки.
Итак, если вы довольны (в вашем package.json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
и т. д. и работает с 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
пытается запуститьgulpfile.js
вашу локально установленную версиюgulp
, см. Здесь . Отсюда и причина глобальной и локальной установки gulp.
По сути, когда вы устанавливаете gulp
локально, сценария нет в вашем, PATH
и вы не можете просто напечатать gulp
и ожидать, что оболочка найдет команду. Устанавливая его глобально, gulp
скрипт попадает в ваш, PATH
потому что глобальныйnode/bin/
каталог, каталог, скорее всего, находится на вашем пути.
Однако, чтобы уважать ваши локальные зависимости, gulp
используйте вашу локально установленную версию для запуска gulpfile.js
.
gulp
пакет необходим для установки node_modules/.bin/gulp
в пути. Хранилище дешево, но выбрасывать МБ для симуляции символической ссылки - чистая небрежность ИМО.
Вы можете связать глобально установленный gulp
локально с
npm link 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 и т. Д.):
node_modules/.bin
С помощью этой записи относительного пути, если вы находитесь в корневой папке любого проекта узла, вы можете запустить любой инструмент командной строки (eslint, gulp и т. Д. И т. Д.), Не беспокоясь о «глобальных установках» или npm run
т. Д.
Как только я это сделал, я никогда не устанавливал модуль глобально.