Сценарий: приложение моего узла проверено и построено на моем 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
.
Я предполагаю, что это потому, что компиляция библиотеки записывает что-то, связанное с текущей средой, и, таким образом, если оно перемещено в другую среду, оно не работает должным образом.
Если я перестраиваю библиотеку на целевой машине, все работает плавно.
Так вот идет мой мозговой штурм:
Должен ли я установить этот модуль на целевой машине на каждом развертывании? Должен ли я установить все приложение на целевую машину, а не на CI (мне это кажется неправильным)?
Должен ли я установить этот специальный модуль, который создает что-то глобальное (
npm install node-argon2 -g
) и связывает его (npm link node-argon2
) в каталоге приложения?Должен ли я исправить компиляцию этой библиотеки c, чтобы она работала на целевой машине (не знаю, как это сделать)?
Я также хотел бы узнать, не хватает ли я лучшей практики в том, что я делаю.
Заранее благодарим за помощь!
Это потому, что 'node-argon2' построен с' -march = native' и предназначен для компиляции на целевой машине, а не для предварительной упаковки. Вы можете разветвить его и отредактировать флаги сборки, но это именно так для максимальной производительности на всех машинах. (отказ от ответственности: я автор) – ranisalt