Зависимости javascript в проекте python

Я пишу программное обеспечение, которое позволяет публиковать математические книги в виде веб-сайтов. Он основан в основном на Python + Flask, но для работы с уравнениями я использую MathJax. MathJax может использоваться на стороне клиента или на стороне сервера (через узел MathJax). В последнем случае я должен использовать npm установить MathJax-узел в каком-то месте, доступном для моего основного скрипта Python, а затем вызвать его из скрипта. В первом случае я должен предоставить MathJax.js в качестве ресурса, доступного для клиента (в настоящее время я использую Flask's send_from_directory функция).

Мой вопрос: какова лучшая практика работы с такими гетерогенными зависимостями в Python? Моя цель - максимально упростить процесс установки, по крайней мере, на Unix-подобных системах (Linux или MacOS), при условии, что node а также npm уже доступны.

Я могу просто поместить все необходимые мне источники JavaScript в свой дистрибутив, но, может быть, есть лучший способ сделать это?

3 ответа

Мой вопрос: какова лучшая практика работы с такими гетерогенными зависимостями в Python?

В случае зависимостей Node я бы включил package.json файл в каталоге, который определяет необходимые зависимости узла. Для других языков / менеджеров пакетов я бы также использовал любой обычный способ определения зависимостей (например, добавление Gemfile для зависимостей Ruby).

Другим распространенным примером этого, который приходит с Python/Flask, является использование менеджера пакетов Bower для статических зависимостей внешнего интерфейса. В этом случае зависимости указываются в bower.json файл и, как правило, вытягиваются в папку беседки в Flask's static каталог.

Я могу просто поместить все необходимые мне источники JavaScript в свой дистрибутив, но, может быть, есть лучший способ сделать это?

Как только вы получили package.json с указанными зависимостями, вы можете выбрать и установить все необходимые узлы Node, запустив npm install что, на мой взгляд, является более элегантным решением, чем включение в проект источников javascript.

Теперь, когда у вас есть несколько менеджеров пакетов (например, может быть, вы используете pip для зависимостей Python в дополнение к npm для зависимостей Node), вы можете захотеть сделать Makefile или какой-нибудь сценарий развертывания / сборки для извлечения / установки, используя все из них (например, если бы я использовал Travis CI, я бы обновил свой .travis.yml звонить npm install в дополнение к pip install -r).

Использование Node.js package.json было бы наиболее оптимальным решением для работы с зависимостями JavaScript. Что касается выполнения исполняемых файлов из.py, вы можете сослаться на этот ответ. Выполнение команды оболочки из Python и получение выходных данных. Зависимости узла по умолчанию находятся внутри./node_modules в том же каталоге, что и местоположение вашего файла package.json.

Для установки новых зависимостей:

npm install --save npm-package-you-want-to-install

После того, как вы их подготовите, эта команда установит для вас все:

npm install

Зависимости узлов являются определенно более элегантным способом решения проблем, поскольку javascript - это постоянно развивающийся мир, и гораздо проще взглянуть на package.json, чем на множество тегов / функций сценариев, которые просто вызывают указанные сценарии. Если вам нужна автоматизированная система, я бы предложил создать исполняемый файл (.sh), который будет запускаться в обоих случаях, и вы сможете использовать его в своих будущих проектах.

Я рекомендую использовать webpack.js, а не Bowerjs. NPM и его package.json очень хороши для обновления зависимостей, но ссылки на библиотеки из node_modules немного смущают.

Другие вопросы по тегам