it-roy-ru.com

Как обновить версию nodejs в Azure

В настоящее время у меня есть функция Azure и версия 6.5.0 по умолчанию Node.js. Цель состоит в том, чтобы обновить его. Я проверил список доступных версий Node.js в Azure, и последняя версия 8.9.4. Я читал об этом документация , где упоминается 2 способа сделать это.

1) package.json

Поместите следующую конфигурацию в файл package.json

"engines": {
    "node": "8.9.4"
}

Так я и сделал, но безуспешно.

2) Настройки приложения

Перейдите в настройки приложения и обновите значение для WEBSITE_NODE_DEFAULT_VERSION до 8.9.4

Здесь у меня есть 3 проблемы с этим методом:

  • вход process.version в функцию показывает мне 6.11.0. Я понятия не имею, почему ... 
  • На самом деле это Node.js 8.9.4, но некоторые функции ES6, такие как async arrow functions, выдают ошибку 
  • каждый раз, когда я запускаю команду serverless deploy, она воссоздает сервис и сбрасывает значение WEBSITE_NODE_DEFAULT_VERSION в значение по умолчанию, то есть в 6.5.0

Еще одна проблема с функциями Azure: при развертывании функции с изменениями веб-интерфейс Azure Portal по-прежнему показывает мне не обновленную функцию (старую), пока там работает новая версия этой функции. Weird ...

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

4
rashad

logging process.version в функции показывает мне 6.11.0.

Как сказал @David, среда выполнения функций Azure v1 (~1) блокирует версию вашего узла на v6.11

При изменении WEBSITE_NODE_DEFAULT_VERSION на 8.9.4, вы также должны изменить во время выполнения версию FUNCTIONS_EXTENSION_VERSION на beta в настройках вашего приложения.

(Обратите внимание, что переключатель времени выполнения может вызвать критические изменения, вместо этого вы можете создать новое приложение-функцию, если произойдет ошибка.)

И первый метод, использующий package.json, не работает в моем тесте. 

некоторые функции ES6, такие как асинхронные стрелки, выдают ошибку

После успешного обновления версии узла, async arrow functions также отлично работает в моем тесте.

каждый раз, когда я запускаю команду развертывания без сервера, он воссоздает сервис и сбрасывает значение WEBSITE_NODE_DEFAULT_VERSION в значение по умолчанию

serverless deploy - это команда для развертывания всего сервиса. Поэтому нормально наблюдать воссоздание (по умолчанию v6.5), так как в вашем файле yml нет параметра для версии узла.

Чтобы избежать этого, используйте serverless deploy -f <functionname> для развертывания определенной функции вместо всего приложения.

Когда я развертываю функцию с изменениями, веб-интерфейс Azure Portal по-прежнему показывает мне не обновленную функцию (старую), пока там работает новая версия этой функции.

То же самое произошло на моей стороне. Я обнаружил, что скрипт может быть правильно показан в редакторе приложений Но в портале и куду обновление не отображается. Я также проверил файлы журналов в Kudu, он говорит Script for function 'functionname' changed. Reloading.

Открыли выпуск на github о последней проблеме, которую мы встретили.

5
Jerry Liu

Просто для формализации, из моего комментария: Функции времени выполнения v1 заблокированы для конкретной версии Node.js (в настоящее время 6.11.2), для этого справочного документа .

Чтобы использовать настраиваемую среду выполнения Node.js, вам необходимо обновить среду выполнения функций до версии v2.x:

 Function overview page

 Function app settings, to change runtime

3
David Makogon

Вы можете установить WEBSITE_NODE_DEFAULT_VERSION , проверив версию nodejs из D: // программные файлы (x86)/nodejs. Появится список всех доступных версий. Выберите один и обновите WEBSITE_NODE_DEFAULT_VERSION

Это сработало для меня ... Я изменил 8.11 на 8.11.1

1
Shailesh Jha