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

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

Ответ 1

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

npm 5.2 +

Утилита npx в комплекте с npm 5.2 решает эту проблему. С его помощью вы можете вызывать локально установленные утилиты, такие как глобально установленные утилиты (но вы должны начать команду с npx). Например, если вы хотите вызвать локально установленный eslint, вы можете сделать:

npx eslint .

npm < 5.2

При использовании в поле script вашего package.json, npm выполняется поиск node_modules для инструмента, а также для модулей, установленных на глобальном уровне, поэтому локальной установки достаточно.

Итак, если вы довольны (в вашем пакете .json):

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

и т.д.. и работает с npm run test, тогда вам вообще не понадобится глобальная установка.

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

Добавление:

Похоже, что gulp имеет необычное поведение при использовании в глобальном масштабе. При использовании в качестве глобальной установки gulp ищет локально установленный gulp для управления. Поэтому для глобальной установки gulp требуется локальная установка gulp для работы. Однако ответ выше. Локальные установки всегда предпочтительнее глобальных установок.

Ответ 2

TL;DR; Вот почему:

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

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

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

Ответ 3

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

npm link gulp

Ответ 4

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

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

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

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

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

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

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

Вы можете попробовать рассвет, это проще

https://github.com/alibaba/dawn

Пример:

Установить

npm i dawn -g

Добавьте в проект .dawn.yml файл

build:
  - name: webpack
    output: ./dist
    entry: ./src/*.js
    template: ./assets/*.html

Выполните следующую команду

dn build

Вы можете выполнить сборку

Ответ 8

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

node_modules/.bin

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

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