У 2 посібниках про gulp йдеться про те, що мені потрібно встановити gulp спочатку глобально (з прапорцем -g), а потім ще раз локально. Навіщо мені це потрібно?
У 2 посібниках про gulp йдеться про те, що мені потрібно встановити gulp спочатку глобально (з прапорцем -g), а потім ще раз локально. Навіщо мені це потрібно?
Відповіді:
При глобальній установці інструменту користувач повинен використовувати його як утиліту командного рядка в будь-якому місці, у тому числі поза проектами вузлів. Глобальні встановлення для проекту вузла погані, оскільки вони ускладнюють розгортання.
npx
Утиліта в комплекті з npm
5.2
вирішує цю проблему. З його допомогою ви можете викликати локально встановлені утиліти, такі як глобально встановлені утиліти (але ви повинні почати команду з npx
). Наприклад, якщо ви хочете викликати локально встановлений eslint
, ви можете зробити:
npx eslint .
При використанні в script
полі вашого пакета.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 для роботи. Відповідь вище все ще стоїть. Локальні встановлення завжди переважні перед глобальними.
./node_modules/.bin/gulp
.
gulp
і coffee
тому команди працюють з мого кореня проекту вузла (наприклад, alias gulp="node_modules/.bin/gulp"
). Таким чином, команди зручні для використання, якщо це потрібно, і глобальні / локальні конфлікти версій не виникають.
gulp
, воно дає мені таке повідомлення про помилку Local gulp not found in ...
. Наскільки я розумію, спочатку слід переглянути локальні модулі node_, а якщо їх не знайти, то слід вивчити глобально встановлені модулі, чи не так? Дякую!
TLDR; Ось чому :
Причина цього працює в тому, що
gulp
намагається запуститиgulpfile.js
вашу локально встановлену версіюgulp
, дивіться тут . Звідси причина глобальної та локальної установки глота.
По суті, при gulp
локальному встановленні скрипт не є у вашому, PATH
і тому ви не можете просто набрати gulp
та очікувати, що оболонка знайде команду. Встановивши його глобально, gulp
сценарій потрапляє у ваш, PATH
оскільки глобальний node/bin/
каталог, швидше за все, на вашому шляху.
Однак, щоб поважати ваші локальні залежності, gulp
буде використовувати локально встановлену версію себе для запуску gulpfile.js
.
gulp
пакет необхідний для того, щоб ввести node_modules/.bin/gulp
шлях. Зберігання дешево, але викидання МБ для імітації симпосилання - це чиста неохайність ІМО.
Ви можете зв’язати gulp
локально встановлений глобально
npm link gulp
npm link
.
Питання " Чому нам потрібно встановлювати gulp глобально та локально? " Можна розділити на наступні два питання:
Чому мені потрібно встановлювати gulp локально, якщо я вже встановив його глобально?
Чому мені потрібно встановлювати gulp глобально, якщо я вже встановив його локально?
Декілька інших дали відмінні відповіді на тези тез поодиноко, але я вважав, що було б корисно консолідувати інформацію в єдиній відповіді.
Чому мені потрібно встановлювати gulp локально, якщо я вже встановив його глобально?
Обґрунтування установки локальної глотки складається з декількох причин:
Чому мені потрібно встановлювати gulp глобально, якщо я вже встановив його локально?
Щоб уникнути локальної установки, ви можете використовувати npm link [package]
, але команда посилань, як і 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
тощо.
Після цього я ніколи не встановлював модуль у всьому світі.