it-swarm.com.ru

Почему нам нужно установить gulp глобально и локально?

2 руководства о gulp говорят, что мне нужно сначала установить gulp глобально (с флагом -g), а затем еще раз локально. Зачем мне это нужно?

284
Stepan Suvorov

При глобальной установке инструмента он должен использоваться пользователем в качестве утилиты командной строки где угодно, в том числе за пределами узловых проектов. Глобальные установки для проекта узла плохо , потому что они усложняют развертывание.

нпм 5.2+

Утилита npx в комплекте с npm5.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. Ответ выше все еще стоит, хотя. Локальные установки всегда предпочтительнее глобальных.

231
qubyte

TLDR; Вот почему :

Это работает потому, что gulp пытается запустить ваш gulpfile.js, используя локально установленную версию gulp, см. здесь . Отсюда и причина глобальной и локальной установки gulp.

По сути, когда вы устанавливаете gulp локально, сценария нет в вашем PATH, и поэтому вы не можете просто ввести gulp и ожидать, что командная консоль найдет команду. Устанавливая его глобально, скрипт gulp попадает в ваше PATH, потому что глобальный каталог node/bin/, скорее всего, находится на вашем пути.

Чтобы уважать ваши локальные зависимости, хотя, gulp будет использовать вашу локально установленную версию самого себя для запуска gulpfile.js.

80
Dwayne Crooks

Вы можете связать глобально установленное gulp локально с

npm link gulp
78
Berislav Lopac

Вопрос " Почему мы должны устанавливать gulp глобально и локально? " можно разбить на следующие два вопроса:

  1. Зачем мне устанавливать локальную версию gulp, если я уже установил ее глобально?

  2. Зачем мне нужно устанавливать gulp глобально, если я уже установил его локально?

Несколько других дали отличные ответы на эти вопросы в отдельности, но я подумал, что было бы полезно объединить информацию в единый ответ.

Зачем мне устанавливать gulp локально, если я уже установил его глобально?

Обоснование установки gulp локально состоит из нескольких причин:

  1. Включение зависимостей вашего проекта локально гарантирует, что используемая версия gulp (или других зависимостей) является изначально предполагаемой версией.
  2. Node не учитывает глобальные модули по умолчанию при использовании require () (который необходимо включить в свой скрипт gulp). В конечном итоге это связано с тем, что путь к глобальным модулям по умолчанию не добавляется в NODE_PATH.
  3. Согласно команде разработчиков Node, локальные модули загружаются быстрее. Я не могу сказать, почему это так, но это может показаться более актуальным для использования узла в производственной среде (то есть в зависимости от времени выполнения), чем в разработке (т.е. в зависимости от dev). Я полагаю, что это законная причина, поскольку некоторые могут заботиться о том, какое незначительное преимущество в скорости достигается при загрузке локальных и глобальных модулей, но не стесняйтесь поднять бровь по этой причине.

Зачем мне нужно устанавливать gulp глобально, если я уже установил его локально?

  1. Обоснованием установки gulp на глобальном уровне является удобство автоматического поиска исполняемого файла gulp в вашей системной папке.

Чтобы избежать локальной установки, вы можете использовать npm link [package], но команда link, а также команда install --global, похоже, не поддерживают параметр --save-dev, что означает, что не существует простого способа установить gulp глобально, а затем легко добавить любую версию это к вашему локальному файлу package.json.

В конечном счете, я считаю, что более разумно иметь возможность использовать глобальные модули, чтобы избежать дублирования установки общих инструментов во всех ваших проектах, особенно в случае таких инструментов разработки, как grunt, gulp, jshint и т.д. К сожалению, это кажется, что вы в конечном итоге немного сражаетесь с инструментами, когда идете против зерна.

63
Derek Greer

Технически вам не нужно устанавливать его глобально, если папка node_modules в вашей локальной установке находится в вашем PATH. Вообще это не очень хорошая идея.

В качестве альтернативы, если npm test ссылается на gulp, вы можете просто ввести npm test, и он запустит локальный глоток.

Я никогда не устанавливал глоток глобально - я думаю, что это плохая форма.

8
robrich

Я не уверен, была ли наша проблема напрямую связана с установкой gulp только локально. Но нам пришлось самим устанавливать кучу зависимостей. Это привело к созданию "огромного" package.json, и мы не уверены, действительно ли это хорошая идея установить gulp только локально. Мы должны были сделать это из-за нашей среды сборки. Но я бы не советовал устанавливать gulp не в глобальном масштабе, если это не является абсолютно необходимым. Мы столкнулись с похожими проблемами, описанными ниже запись в блоге

Ни одна из этих проблем не возникает ни у одного из наших разработчиков на их локальных машинах, потому что все они установлены глобально. В системе сборки у нас были описанные проблемы. Если кому-то интересно, я мог бы глубже погрузиться в этот вопрос. Но сейчас я просто хотел упомянуть, что это не простой способ установить gulp только локально.

2
tschoartschi

Просто потому, что я не видел этого здесь, если вы работаете в MacOS или Linux, я предлагаю вам добавить это в ваш PATH (в вашем bashrc и т.д.):

node_modules/.bin

С помощью этой записи относительного пути, если вы находитесь в корневой папке любого проекта узла, вы можете запустить любой инструмент командной строки (eslint, gulp и т.д. И т.д.), Не беспокоясь о "глобальных установках" или npm run и т.д.

Как только я это сделал, я никогда не устанавливал модуль глобально.

0
Elliot Nelson