2 руководства о gulp говорят, что мне нужно установить gulp сначала глобально (с флагом -g), а затем еще раз локально. Зачем мне это нужно?
Зачем нам устанавливать gulp глобально и локально?
Ответ 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
и т.д.
Как только я это сделал, я никогда не устанавливал модуль глобально.