Зависимости 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 немного смущают.