Подтвердить что ты не робот

Модуль кросс-компиляции node со встроенными связями с node -gyp

Я использую AWS Lambda, который включает в себя создание архива моего node.js script, включая папку node_modules и загрузку его в свою инфраструктуру для запуска.

Это прекрасно работает, за исключением случаев, когда речь идет о модулях node с собственными привязками (с использованием node -gyp). Поскольку привязка была выполнена и архивирована на моем локальном компьютере (OS X), она не совместима с серверами AWS (Amazon Linux).

Как я могу перекрестно скомпилировать/установить модуль node (в частности, node-sqlite3), поэтому, когда я загружаю его на другой сервер arch работает?

4b9b3361

Ответ 1

Хотя это не решение вашей проблемы, очень простым решением может быть просто скомпилировать собственные аддоны на машине Linux.

В вашей конкретной ситуации я бы использовал Vagrant. Vagrant может создавать виртуальные машины и настраивать их в течение нескольких секунд.

  • Найдите образ ОС, похожий на дистрибутив Amazon Linux (Fedora, CentOS, другие, которые используют yum в качестве диспетчера пакетов - см. Wiki)
  • Используйте простую конфигурацию script, которая при запуске Vagrant при запуске машины будет запускать npm install (возможно, она также может удалить папку node_modules, прежде чем обеспечить чистую установку).
  • Для дополнительного удобства script также может создать zip файл для развертывания
  • После завершения установки script выключит виртуальную машину, чтобы избежать ненужного потребления системных ресурсов.
  • Развертывание!

Может потребоваться некоторая настройка, если связанные библиотеки не находятся на одном и том же месте на целевой машине, но обычно это кажется мне самым лучшим и быстрым решением.

Ответ 2

При установке приложения с использованием Vagrant может быть достаточно в некоторых случаях, я счел необходимым создать приложение на Linux, которое как можно ближе к Lambda Amazon Linux AMI, насколько это возможно..

Вы можете прочитать исходный ответ здесь: fooobar.com/questions/294525/...

Шаги, чтобы заставить его работать:

  • Создайте новый экземпляр EC2. Убедитесь, что он основан на том же изображении, что и ваша среда AWS Lambda. Вы можете просмотреть здесь информацию о Lambda env: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html. В нашем случае Amazon Linux AMI назывался amzn-ami-hvm-2015.03.0.x86_64-gp2.

  • Установите nvm и используйте его для установки той же версии Node.js, что и на AWS Lambda. На момент написания это было v0.10.36. Вы можете снова обратиться к http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html, чтобы узнать.

  • Вам, вероятно, потребуется установить компилятор git и g++ на EC2. Вы можете сделать это с помощью

    sudo yum install git gcc-c++
  • Наконец, клонируйте свое приложение в новый EC2 и установите зависимости приложения:

    nvm use 0.10.36
    npm install --production
    
  • Затем вы можете легко загрузить node_modules с помощью scp или такого.

Ответ 3

Те же строки, что и Роберт, когда мне приходилось работать на моем MAC в другой ОС, я использую vm ware, например, Oracle free virtualizer VirtualBox, чтобы получить linux на моем mac, для меня не стоит. Или зарегистрируйтесь для новой учетной записи AWS, вы получите микро бесплатно в течение года. Используйте это, чтобы получить свой linux box, сделайте все, что вам там нужно.