Каждый JS-разработчик, кто хоть раз использовал NPM, знает как минимум про два типа зависимостей — normal и dev. Несмотря на то, что остальные не пользуются такой высокой популярностью, на практике они могут стать незаменимыми. Поэтому важно не просто знать об их существовании, но также уметь правильно и своевременно применять. Как именно — разбираемся в этой статье.
Нормальные зависимости
Все normal или runtime зависимости JavaScript перечислены в dependencies, в папке package.json. Как правило они указывают только название ключа и версию (значение), после чего менеджер пакетов, например это может быть NPM — берет их из глобального реестра.
При этом указывать точную версию зависимости совершенно не обязательно, вместо этого вы можете установить:
- Примерную версию. При помощи операторов сравнения можно указать не одну фиксированную, а сразу несколько версий — больше или меньше конкретного номера. Например, это может быть написано в формате >1.32 или <= 1.3.3. Также с помощью оператора ~ можно устанавливать эквивалентную версию — "lodash": "~1.3.3". В таком случае будут загружаться только патчи, которые находятся в зоне между 1.3.3 и 1.4.0. Еще один вариант — это указание так называемой совместимой версии, например "lodash": "^ 1.2.0". Этот способ применим если вы хотите загружать версии, которые не будут включать критические изменения.
- URL-адрес. Вам даже не обязательно указывать версию, вместо этого можно сослаться на конкретный URL, загрузив таким образом нужный модуль из другого места.
- Локальный файл. Также вы можете сослаться на файл, расположенный на жестком диске вашего устройства. Это довольно распространенный вариант, особенно когда нужно протестировать разработанный модель прежде, чем загружать его на NPM. Ссылку на папку локального модуля можно создать с помощью параметра локального файла. При этом, если вначале ссылки стоит префикс file://, вы можете использовать не только полные, но и частичные пути.
В каких случаях нужно применять нормальные зависимости
В обычных зависимостях содержится все, что необходимо для разработки проекта и не представлено ни одним из существующих модулей. Однако, если ваш проект — это и есть модуль, тут возникает нюанс — при использовании такого модуля в других пакетах, например таких как React, включать его в зависимости не нужно. В таком случае подразумевается, что она уже присутствует.