NPM стал де-факто стандартным менеджером пакетов для приложений JavaScript. Поскольку сейчас он используется во многих проектах разного размера, очень важно следовать установленным практикам, чтобы избежать возможных головных болей, когда процесс развертывания идет не так, как надо. Есть несколько советов, которые я бы дал каждому разработчику JavaScript, который собирается использовать NPM в своем проекте.

Во-первых, заблокируйте все зависимости для текущих установленных версий.

Это достигается созданием файла термоусадочной пленки:

npm shrinkwrap --dev

Эта команда создаст файл с именем «npm-shrinkwrap.json», в котором перечислены все зависимости с их точными версиями, которые установлены сейчас, и даже версиями пакетов, от которых они зависят. Лично я предпочитаю передавать аргумент «-dev» для блокировки devDependencies.

В следующий раз, когда вы выполните «npm install» для своего проекта, он попытается установить точные версии, указанные в файле «npm-shrinkwrap.json», а не в package.json.

Не используйте диапазоны для указания версий пакетов в файле «package.json». Следует избегать «диапазонов вставки», которые применяются по умолчанию, таких как «^1.0.5», поскольку вы никогда не будете уверены, что приложение, работающее на вашем локальном компьютере, будет вести себя так же после того, как оно будет развернуто в другой среде. Сообщество Node очень динамично, и новые версии пакетов выходят слишком часто, чтобы решить проблему устаревания некоторых функций или конфликтов между новыми и старыми пакетами. Проблемы случаются даже при незначительных изменениях или исправлениях.

Во-вторых, используйте NPM v3

Он содержит различные улучшения и исправления известных проблем в NPM v2. Одной из наиболее важных проблем, которые были устранены, является проблема «peerDependency», которая приводила к появлению нескольких экземпляров пакета некоторой общей библиотеки.

Если вы не используете Node v5, вам необходимо обновить NPM:

npm upgrade -g npm 

В-третьих, настройте свой частный реестр NPM.

Частный реестр NPM не только сократит время, затрачиваемое на установку пакетов, но и избавит вас от историй Kik & left-pad, когда автор вдруг решит удалить популярный пакет из реестра.

Вы можете либо использовать пакет NPM, такой как Sinopia, либо выбрать корпоративное решение, такое как Nexus, которое поддерживает NPM.

В заключение, эти 3 вещи очень помогают в процессах непрерывной интеграции и развертывания и повышают предсказуемость приложений Node. Поэтому я настоятельно рекомендую применить их в вашем текущем или следующем проекте.