2016-10-20 1 views
0

Сценарий: приложение моего узла проверено и построено на моем CI (npm install и npm test). Затем он упаковывается вместе с папкой node_modules и развертывается в целевой среде.Должен ли я устанавливать модуль узла, который создает библиотеку C в CI или на целевом сервере?

Пока все хорошо.

Затем я включил модуль node-argon2, который после установки строит библиотеку c с использованием node-gyp. Библиотека c теперь построена во время npm install на CI (машине Amazon Linux), все приложение упаковано и развернуто на целевой сервер (другой компьютер Amazon Linux). Приложение теперь дает ошибку, когда я использую модуль node-argon2 с этой ошибкой: Illegal instruction.

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

Если я перестраиваю библиотеку на целевой машине, все работает плавно.

Так вот идет мой мозговой штурм:

  1. Должен ли я установить этот модуль на целевой машине на каждом развертывании? Должен ли я установить все приложение на целевую машину, а не на CI (мне это кажется неправильным)?

  2. Должен ли я установить этот специальный модуль, который создает что-то глобальное (npm install node-argon2 -g) и связывает его (npm link node-argon2) в каталоге приложения?

  3. Должен ли я исправить компиляцию этой библиотеки c, чтобы она работала на целевой машине (не знаю, как это сделать)?

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

Заранее благодарим за помощь!

+0

Это потому, что 'node-argon2' построен с' -march = native' и предназначен для компиляции на целевой машине, а не для предварительной упаковки. Вы можете разветвить его и отредактировать флаги сборки, но это именно так для максимальной производительности на всех машинах. (отказ от ответственности: я автор) – ranisalt

ответ

0

Возможно, вам стоит подумать о том, чтобы упаковать ваше приложение, используя Docker. Контейнерный узел с докером невероятно easy.

Если вы не хотите заниматься этим прямо сейчас, я думаю, вам стоит подумать о повторной установке пакетов npm при каждом развертывании - это самый надежный способ ИМО.