9. Глобальные модули

Следующая возможность которую мы с вами рассмотрим это глобальные модули. Любой модуль можно поставить глобально если поставить флаг «-g».

На «MAC» сразу может не получится, потому что глобально означает в системную директорию. Если операционная система поддерживает ограничение доступа, то как правило от обычного юзера, в системную директорию я писать не имею права. Для этого на «MAC» надо сделать запуск через команду «sudo» выглядеть это будет вот так

У меня же «Windows», а в «Windows» директория глобальных модулей находится внутри каталога юзера — C:\Users\имя_пользователя\AppData\Roaming\npm по этому ни каких особых разрешений для установки модулей глобально не нужно.

Screenshot_09_01

как видите в первой строке я ввел команду «npm -g i express». Помните мы с вами говорили о том, что «i» и «install» это одно и то же. Во второй строке показан путь куда «NPM» поставил наш модуль, давайте посмотрим

Screenshot_09_02

Так и есть, «NPM» создал папку «node_modules» и поставил туда «express» причем последней версии, так как мы ее не указывали в команде.

Чем глобальная установка отличается от обычной? В первую очередь это местом, глобальные модули ставятся в стандартную системную директорию. Второе, это то что те бинарники которые есть в свойстве «bin» в «package.json» будут поставлены по системному пути. Это означает, что бинарник «express»  я теперь могу вызвать просто вот так

Screenshot_09_03

Правда, для этого мне пришлось поставить третий «express», четвертый совсем другой. Это как раз то о чем мы говорили, что если новая версия ломает код использующий старую, то мы должны обновить мажорную версию. Подробней про миграцию с третей на четвертую версии «express» можно почитать здесь.

Любые дальнейшие операции с глобальными модулями осуществляют так же как с обычными, но с флагом «-g». Например верну себе обратно четвертый «express», обновлюсь

Screenshot_09_04

можно было просто ввести

обновились бы все глобальные модули которые есть у меня.

Зачем вообще нужны глобальные модули, перед тем как об этом говорить, развеем частые заблуждения связанные со словом «глобальный». Глобальный обычно означает, доступный на уровне системы, доступный всем. Глобальная переменная, это та к которой можно обратиться от куда угодно. Но в данном случае слово глобальный используется по историческим причинам. Когда то так и было, но сейчас, если модуль поставлен глобально то это не означает, что он автоматически становится доступен всем. То есть не смотря на то, что я поставил «express» глобально, если я где нибудь сделаю

то он модуля не найдет. Глобальный, в данном случае, означает, скорее, системный. И основное применение глобальной установки модуля, это сделать доступным бинарник по системному пути. Например, есть ряд утилит, написанных на «node.js», скажем есть «uglify-js», которая умеет сжимать javascript файлы. Эту утилиту я могу поставить глобально

Screenshot_09_05

Теперь, если мне надо сжать js файл я могу в консоле набрать

подробнее про «uglify-js» можно почитать вот здесь.

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

если хотите, посмотрите «help», но это не рекомендуется.