Широко распространено, чтобы пойти на быструю начать страницу какого-либо инструмента и утилиты и найти инструкции, аналогичные этой:
npm install - global cool-package cool start
Эта команда может работать, но --глобал должен сделать вашу бровей. Он едва нужен или рекомендуется устанавливать пакеты во всем мире.
А почему бы не?
Есть несколько причин для вас, чтобы избежать установки пакетов глобально:
Но это работает для меня …
Кто из нас, разработчики, никогда не слышал это? Ваш коллега пытается бегать то, что вы только что сказал им, и … не удается. Но это работает для меня, вы говорите им. Глобальные пакеты могут быть это. Если у вас есть какой-то пакет, у них нет, или если есть несоответствие версии между вашими машинами, это может быть проблемой здесь.
CI есть неудача
Эта проблема похожа на несоответствие машины, описанному выше. Вы устанавливаете CI, который пытается запустить команду, но она не может найти его. Причина в том, что команда была частью пакета, установленного локально на вашей машине.
Эта версия не работает
Одна из самых худших проблем при полагании на глобальные пакеты – совместимость версии. Если вы работаете над несколькими проектами, вы, вероятно, будут иметь разные версии пакетов. Версия 3 для проекта A и версии 4 для проекта B. К сожалению, только одна версия может быть установлена во всем мире. Вам нужно разрабатывать это.
О, новая версия узла!
Вы используете NVM для управления вашими узлами? (И если вы этого не сделаете – посмотрите на это. Это превосходно!). Если вы переключитесь на новую версию узла, даже незначительное изменение, ваши глобальные пакеты исчезли. Если вы очень осторожный сопровождающий, вы будете использовать опцию --reinstall-пакеты - от = по умолчанию Отказ Но если вы похожи на меня, вы найдете некоторое время спустя, что определенная команда не работает и понимает, что вы не перенесли свои пакеты. Минимизация количества пакетов, безусловно, может сэкономить какое-то драгоценное время.
Хорошо, я убежден. Я постараюсь избегать использования глобальных пакетов. Что такое рекомендуемый способ работы?
Держите их местный
В большинстве случаев вы должны держать свои пакеты местными к вашим проектам. Сохраните все пакеты, необходимые для проекта локально с совместимой версией или диапазоном версий.
npm install --save cool-package or yarn add cool-package
Но это поднимает проблему: при установке пакета глобально вы можете легко запустить его, набрав его исполняемое имя:
cool start
Если вы попытаетесь сделать это в локальном пакете, вы получите ошибку, что команда не была найдена. NPM устанавливает исполняемый файл под node_modules/.bin папка. При запуске команды оболочка не ищет на этот путь. Глобальный путь NPM, с другой стороны, добавляется к траектору оболочки (просмотр его echo $ для просмотра). Есть несколько способов решения этого:
Запустите команду через сценарий NPM.
Определите команду в сценарии NPM:
{
"name": "my-package",
"scripts": {
"build": "cool build",
"test": "cool test"
}
}
Теперь вы можете запустить команду, запустив:
npm run build
Pro Tip: Если ваша команда требует аргументов Config, которые начинаются с двойных тире, вам нужно указать его дважды при запуске через сценарий NPM. Так что, если вы хотите запустить крутая сборка - Учет Вам нужно запустить: NPM Run Build - --watch (с двумя наборами тире). В противном случае команда не будет распознана.
Пробежать с NPM Bin
Тем не менее, есть сценарии, которые вы хотите запустить только изредка, и не имеет смысла создавать сценарий для каждого из них. В этом случае вы можете запустить его напрямую, указав:
node_modules/.bin/cool rare-command.
Более короткий и дружелюбный способ сделать это – использовать команду NPM и Yarn Bin, которая возвращает путь к исполняемому пути, и вы можете запустить:
$(npm bin)/cool rare-command
Имейте команду, которую вы используете часто, но вы не хотите ставить его в сценарий? Установите псевдоним для него, например:
alias cl=$(npm bin)/cool
Эта команда запускает крутой скрипт, который является локальным для проекта, который вы запускаете его.
Используйте NPX для локальных скриптов
Начало NPM 5.2, NPM имеет новый пакет под названием NPX. NPX чрезвычайно мощный, и слишком часто его способности упускаются из виду. Используйте NPX для запуска локальных скриптов: Просто набрав NPX Cool Внутри папки, где установлен классный пакет, NPX находит локальную установку и запустить скрипт. Если вам нужно пройти какие-либо аргументы, просто отправьте их без каких-либо изменений.
Используйте NPX для удаленных пакетов
При запуске нового проекта с помощью CLI, например, Angular CLI, REACT Создайте приложение, или Vue CLI, проект еще не существует. Следовательно, вы не можете установить пакет генератора внутри проекта.
NPX – это спасатель здесь, как вы можете запустить:
npx create-react-app my-app
NPX загружает папку в папку TEMP и выполняет команду оттуда.
В Create-raction-app Имя сценария такое же, как имя пакета. Если имя пакета отличается от команды, вы можете указать имя пакета, которое будет установлено.
npx -package @angular/cli ng new my-app
Используйте пряжу
При установке пряжи команду BIN автоматически отображается в команду пряжи, поэтому вы можете запустить ее как:
yarn cool
(Кредит @bnaya для этого отличного комментария!)
Когда использовать глобальный пакет?
После этого сказано, есть случаи, когда глобальные пакеты приемлемы. Правило большого пальца должно быть использование его, когда:
- Вы запускаете команды в основном вне контекста конкретных проектов.
- Вы запускаете команду относительно часто, и вы не ждали кэша NPX каждый раз.
- Вы не очень чувствителен к версии пакета, или версии не меняются часто.
Для меня пример такой пакеты http-сервер Отказ Мне иногда нужно, когда я хочу запустить простой, ну, HTTP-сервер из локальной папки для параметров разработки и тестирования. В этом случае я бы установил пакет глобально. Ах, и не забудьте обновить версию изредка. Использовать NPM устарел -G Чтобы увидеть, какие пакеты нуждаются в обновлении.
Вывод
Беги NPM LS -G Чтобы увидеть ваши установленные в настоящее время глобальные пакеты. Осторожно просмотрите их и всегда сознавайте о пакетах, которые вы устанавливаете во всем мире.
Чаще всего, чем нет, вы можете избежать глобальных пакетов и экономить себе некоторое драгоценное время отладки.
Оригинал: “https://dev.to/tallyb/when-to-use-global-npm-installs-rarely-2dm3”