Поделиться через


Предупреждения и зависимости в мире Node.js и npm

Разработчики надстроек COM и VSTO, которые не знакомы с миром Node Package Manager (npm) и открытый код разработки, часто удивляются и встревожены определенными аспектами такого рода разработки. Эта статья предназначена для того, чтобы убедить таких разработчиков в том, что они могут найти смущающими.

Дерево зависимостей npm

npm — это стандартный диспетчер пакетов для среды выполнения JavaScript Node.js. Он используется для оптимизации рабочих процессов разработки JavaScript, позволяя разработчикам устанавливать открытый код библиотеки и средства (вместе называемые "пакетами") и управлять зависимостями пакетов.

Дерево зависимостей npm — это иерархическая структура, представляющая все пакеты, от которые зависит проект Node.js. Каждый узел в дереве является пакетом, а его дочерние — это пакеты, от которых он зависит. Эта структура может стать глубоко вложенной, особенно в крупных проектах или при использовании пакетов с большим количеством транзитивных зависимостей.

При запуске npm installnpm считывает package.json и package-lock.json файлы в проекте разработки, чтобы создать это дерево и получить необходимые пакеты.

Общие сведения о npm install предупреждениях

При запуске npm installобычно в консоли возникает шквал предупреждений. Сначала это может быть удивительно, но это нормальная часть работы в Node.js и открытый код экосистемы. Средства Майкрософт, вызывающие npm install, включая генератор Yeoman для надстроек Office, сообщают об этих же предупреждениях.

Не область этой статьи обсуждать все предупреждения, которые npm install могут сообщить, но есть два типа, которые, скорее всего, будут смущать разработчиков, которые не знакомы с Node.js мире.

Предупреждения об устаревании

Эти предупреждения означают, что диспетчеры пакета где-то в дереве зависимостей больше не поддерживают его, и они могут удалить его из Интернета в некоторое время. Ни вы, ни корпорация Майкрософт не имеете никакого контроля над предупреждениями об устаревании пакета, но вы почти всегда можете игнорировать их. Устаревание не означает, что пакет перестал работать. Он по-прежнему работает, и так как установка помещает его копию на компьютер, он будет продолжать работать с проектом в будущем, даже если пакет будет удален из Интернета. Пакет не является веб-службой.

Это очень маловероятно, но возможно, что вы увидите предупреждение об устаревании для пакета, который находится в верхней части дерева зависимостей. Эти пакеты явно перечислены в разделах "зависимости" или "devDependencies" файла package.json проекта. Предупреждения об устаревании для devDependencies можно игнорировать по той же причине, что и ранее: код копируется на компьютер разработки. Пакеты в разделе "зависимости" используются надстройкой во время выполнения, но даже предупреждения об устаревании для них могут игнорироваться в проектах, созданных с помощью средств Майкрософт, таких как генератор Yeoman для надстроек Office и Microsoft 365 Agent Toolkit , так как эти средства включают копии библиотек в пакетах кода JavaScript, которые будет обслуживать веб-сервер надстройки.

Примечание.

Одна из ситуаций, в которой не рекомендуется использовать библиотеку в разделе "Зависимости", вызывает озабоченность, заключается в следующем:

  • Библиотека находится только в разделе "Зависимости", поэтому ее можно использовать при тестировании и отладке локально.
  • При развертывании надстройки для промежуточной или рабочей среды планируется не включать копию библиотеки в код, размещенный на сервере.
  • Вместо этого вы планируете, чтобы надстройка загружала библиотеку из веб-службы, в которую размещаются библиотеки npm, такие как unpkg.com или cdn.jsdelivr.net.

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

Предупреждения системы безопасности или аудита

Предупреждения системы безопасности, также называемые предупреждениями аудита, означают, что в дереве зависимостей есть версия пакета с известной уязвимостью системы безопасности, которую может воспользоваться злоумышленник. Корпорация Майкрософт периодически проверяет наличие этих предупреждений в проектах, созданных нашими инструментами, и исправляет их, как правило, путем обновления библиотеки до более новой версии, которая не содержит уязвимости. Но новые уязвимости обнаруживаются и сообщаются почти ежедневно в отслеживаемые npm install базы данных оповещений системы безопасности, и корпорация Майкрософт не всегда может устранить их сразу. По этой причине нередко при запуске npm install в проекте надстройки сообщается об уязвимостях системы безопасности.

Если зависимость можно отследить до пакета верхнего уровня в разделе devDependencies package.json, ее можно игнорировать. Код выполняется только на вашем компьютере, и вы не собираетесь взломать себя.

Если зависимость выполняет трассировку до пакета верхнего уровня в разделе "Зависимости" или не удается определить пакет верхнего уровня, то перед развертыванием надстройки в рабочей среде следует попытаться устранить уязвимость. В Интернете много хорошей информации о том, как бороться с уязвимостями в пакетах npm. Здесь мы упоминание один метод. Некоторые уязвимости могут быть автоматически устранены npm. Просто выполните команду npm audit fix в папке, в которой находится файл package.json. Если есть более новая версия пакета без уязвимости и более новая версия не содержит критических изменений относительно уязвимой версии, npm автоматически обновит пакет до безопасной версии.

Другая стратегия заключается в том, чтобы каждые несколько недель создать новый проект надстройки с помощью того же средства Майкрософт, что и исходный проект. (Выберите те же параметры для типа проекта, языка, приложения Office и т. д.) Если npm install в новом проекте больше не сообщается об уязвимости системы безопасности, корпорация Майкрософт исправит ее в шаблоне проекта. Вы можете переместить исправление в проект, выполнив следующие действия.

  1. Скопируйте раздел "зависимости" из нового проекта над тем же разделом в package.json исходного проекта.
  2. Удалите папку node_modules из исходного проекта.
  3. Выполните npm install в исходном проекте.

Ошибки

Ошибка npm, в отличие от предупреждения, немедленно останавливает обработку команды npm, включая npm install. Необходимо диагностировать и устранить проблему. Иногда ошибка является побочным эффектом временной проблемы сети, когда npm пытается получить пакет. Попробуйте повторно запустить npm install.

Примечание.

Выполнение npm install — это последнее, что делает генератор Yeoman для надстроек Office при создании проекта. Если сообщается об ошибке, повторно запускать генератор не нужно, так как проект был полностью создан. Можно просто выполнить npm install повторно в командной строке.