#node.js #npm #dependencies
#node.js #npm #зависимости
Вопрос:
У меня есть приложение node, которое работает на небольшом устройстве Linux с процессором ARM. Я разрабатываю в macOS, и в приложении есть некоторые зависимости от платформы. Прямо сейчас я просто запускаю npm install
на mac и копирую всю кодовую node_modules
базу и все остальное на устройство Linux. Кажется, все работает нормально, но я не уверен, будет ли это продолжаться. Возможно, он просто еще не прошел по пути выполнения, который опирается на специфичный для mac код.
Я полагаю, что я мог бы работать npm install
на устройстве Linux, но это означало бы, что у нас должен быть один доступный для использования конвейер CI / CD, а это будет головной болью и, вероятно, нереалистичным решением в долгосрочной перспективе.
Какие еще есть варианты? Есть ли какой-нибудь способ заставить npm устанавливать зависимости, как если бы это было в linux ARM box? Я знаю, что вы можете сделать это с электронными приложениями, используя electron-packager. Можно ли это сделать для приложений, не связанных с электронными узлами?
К вашему сведению, я использую следующую команду, чтобы определить, существуют ли зависимости от macOS:
find node_modules -name "*.node" | xargs file
который возвращает
node_modules/snappy/build/Release/binding.node: Mach-O 64-bit bundle x86_64
Комментарии:
1. Если вы хотите создать только один исполняемый файл, возможно, pkg — это то, что вам нужно
2. @BraveButter Я видел этот модуль, но вверху есть отказ от ответственности, в котором говорится
Disclaimer: pkg was created for use within containers and is not intended for use in serverless environments.
, что я не запускаю это внутри контейнера.
Ответ №1:
Вы упоминаете в комментариях, что pkg
это выглядело как возможное решение, но вы обеспокоены тем, что оно зависит от контейнера. Честно говоря, это, вероятно, нормально, если вы не находитесь в бессерверной среде, такой как AWS Lambda.
Помимо этого или аналогичного пакета, ваши очевидные варианты — скомпилировать на устройстве Linux ARM (которое вы исключили) или каким-то образом избавиться от зависимостей, зависящих от платформы. Вам действительно нужно snappy
? Можете ли вы жить без сжатия или с более медленной библиотекой сжатия? Что касается fsevents
, я считаю, что это только для macOS и не повлияет на другие платформы. Вы, вероятно, получаете его как зависимость от chokidar
? Кажется вероятным, что вы можете игнорировать это.
РЕДАКТИРОВАТЬ: Комментарий указывает snappy
, что устанавливается как зависимость от kafka-node
. snappy
является необязательным kafka-node
. Если вы сами не указываете быстрое сжатие, то оно, вероятно, не используется. Вы можете установить kafka-node
без snappy
использования --no-optional
флага: npm install kafka-node --no-optional
попытка использовать snappy
сжатие в этом случае приведет к ошибке времени выполнения. Это потенциально может позволить вам проверять локально на вашем компьютере macOS, который snappy
не используется.
Комментарии:
1. Спасибо за информацию. Зависимости от
snappy
обусловлены прямой зависимостью отkafka-node
, которая должна иметь его где-то в своем дереве зависимостей. Оказывается, зависимость отfsevents
was, отmocha
которой зависит только разработка, так что все в порядке. Я обновлю вопрос, чтобы удалить это.2. Можно ли было бы загрузить
kafka-node
один раз на устройство ARM, а затем сохранить результат в кодовой базе приложения? Что-то вроде локального репозитория только для этого одного пакета. Тогда, я думаю, вам придется как-то ссылаться на локальный файлpackage.json
. Если бы нам нужно было только один раз загрузить и скомпилировать зависимости Кафки, это было бы прекрасно.3.
snappy
является необязательным вkafka-node
. Если вы не указываете быстрое сжатие, оно, вероятно, не используется. Вы можете установитьkafka-node
безsnappy
использования--no-optional
флага:npm install kafka-node --no-optional
попытка использоватьsnappy
сжатие в этом случае приведет к ошибке времени выполнения. Это потенциально может позволить вам проверять локально на вашем компьютере macOS, которыйsnappy
не используется.4. Понял. установка с
--no-optional
помощью удаляет snappy, и в этот момент попытка использовать сжатие приводит к ошибке, как вы сказали. Я думаю, что я установлю kafka без snappy и не буду использовать сжатие при отправке сообщений. Спасибо за помощь.