null

Работа с устаревшими Node.js приложениями с помощью Nx и nvm

Допустим, возникла ситуация, когда необходимо добавить устаревшее Node.js приложение в монорепозиторий, основанный на Nx. Например, все проекты в репозитории работают на Node 18 и yarn 3, а устаревшее приложение использует Node 14 и npm 6.

Как быть? Конечно, можно попробовать перенести проект на более новую версию Node.js и yarn, однако скорее всего это приведет к ошибкам сборки и, возможно, к ошибкам во время работы приложения.

Самое простое решение: изменить версию Node с помощью nvm перед выполнением скрипта. Для этого нужно изменить конфигурацию project.json, добавив executor, который будет запускать команду установки нужной версии Node:

{
  "root": "packages/legacy-lib",
  "targets": {
    "install": {
      "executor": "nx:run-commands",
      "options": {
        "cwd": "packages/legacy-lib",
        "command": ". $HOME/.nvm/nvm.sh && nvm install v14.19.3 && npm install"
      }
    }
  }
}

Если команда . $HOME/.nvm/nvm.sh выдает ошибку permission denied, то нужно добавить права на выполнение с помощью команды chmod u+x $HOME/.nvm/nvm.sh. Также можно описать этот случай в readme проекта.

Этот подход является самым простым в реализации, но его нужно применять для каждого target. Чтобы избежать этого, можно написать shell скрипт или создать собственный executor. Однако это займет больше времени и усилий, а также потребует поддержки в будущем. Подробнее о создании собственных executor можно узнать на странице https://nx.dev/recipes/executors/creating-custom-executors.

Бонусные советы:

  • Для того, чтобы случайно не запустить проект с помощью неправильной версии Node.js и не испортить lock файл, можно добавить органичения с помощью поля engines в package.json и файла .npmrc со значением engine-strict=true.
  • Чтобы запускать проект, используя nvm, не только с помощью Nx, можно добаивть nvmrc файл с указанием версии, например, v14.19.3. После этого можно заменить команду nvm install v14.19.3 на nvm install (версия будет определна автоматически).
  • Чтобы иметь возможность передавать агрументы устаревшим npm скриптам с помощью Nx, необходимо добавить -- в конец команды, например, npm run dev --.
Назад Вперед

Коротко о себе:

Работаю в компании Tune IT .

    Ничего не найдено. n is 0