Зачем нам нужно устанавливать gulp глобально и локально?
В двух руководствах по gulp говорится, что мне нужно сначала установить gulp глобально (с флагом -g), а затем еще раз локально. Зачем мне это нужно?
6 ответов
При глобальной установке инструмента он должен использоваться пользователем как утилита командной строки где угодно, в том числе за пределами узловых проектов. Глобальные установки для проекта узла плохи, потому что они усложняют развертывание.
нпм 5.2+
npx
утилита в комплекте с npm
5.2
решает эту проблему. С его помощью вы можете вызывать локально установленные утилиты, такие как глобально установленные утилиты (но вы должны начать команду с npx
). Например, если вы хотите вызвать локально установленный eslint
, ты можешь сделать:
npx eslint .
нпм < 5,2
Когда используется в 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. Ответ выше все еще стоит, хотя. Локальные установки всегда предпочтительнее глобальных.
TLDR; Вот почему:
Это работает потому, что
gulp
пытается запустить вашgulpfile.js
используя вашу локально установленную версиюgulp
смотрите здесь. Отсюда и причина глобальной и локальной установки gulp.
По сути, при установке gulp
локально скрипт не в вашем PATH
и поэтому вы не можете просто напечатать gulp
и ожидаем, что оболочка найдет команду. Установив его глобально gulp
сценарий попадает в ваш PATH
потому что глобальный node/bin/
каталог, скорее всего, на вашем пути.
Чтобы уважать ваши местные зависимости, хотя, gulp
будет использовать вашу локально установленную версию для запуска gulpfile.js
,
Вы можете связать глобально установленный gulp
локально с
npm link gulp
Вопрос "Зачем нам нужно устанавливать gulp глобально и локально?" Можно разбить на следующие два вопроса:
Зачем мне устанавливать gulp локально, если я уже установил его глобально?
Зачем мне нужно устанавливать gulp глобально, если я уже установил его локально?
Несколько других дали отличные ответы на эти вопросы в отдельности, но я подумал, что было бы полезно объединить информацию в единый ответ.
Зачем мне устанавливать gulp локально, если я уже установил его глобально?
Обоснование установки gulp локально состоит из нескольких причин:
- Включение зависимостей вашего проекта локально гарантирует, что используемая версия gulp (или других зависимостей) является изначально намеченной версией.
- Node не учитывает глобальные модули по умолчанию при использовании require() (который необходимо включить в свой скрипт gulp). В конечном итоге это связано с тем, что путь к глобальным модулям по умолчанию не добавляется в NODE_PATH.
- По словам команды разработчиков Node, локальные модули загружаются быстрее. Я не могу сказать, почему это так, но это может показаться более актуальным для использования узла в производственной среде (т. Е. В зависимости от времени выполнения), чем в процессе разработки (т. Е. В зависимости от dev). Я полагаю, что это законная причина, поскольку некоторые могут заботиться о том, какое незначительное преимущество в скорости достигается при загрузке локальных и глобальных модулей, но не стесняйтесь поднять бровь по этой причине.
Зачем мне нужно устанавливать 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
и т.п.
Как только я это сделал, я никогда не устанавливал модуль глобально.