python项目中的javascript依赖项

时间:2017-05-25 16:51:29

标签: javascript python dependency-management

我正在编写软件,允许人们将数学书籍作为网站发布。它主要基于Python + Flask,但是使用MathJax来处理方程式。 MathJax可以在客户端或服务器端使用(通过MathJax-node)。在后一种情况下,我必须使用npm在我的主Python脚本可访问的某个位置安装MathJax节点,然后从脚本调用它。在前一种情况下,我必须提供MathJax.js作为资产,可供客户使用(目前我使用Flask' send_from_directory函数。)

我的问题是:在Python中处理这种异构依赖的最佳做法是什么?我的目标是使安装过程尽可能简单,至少在类似unix的系统(Linux或MacOS)上,前提是nodenpm已经可用。

我可以将我需要的所有javascript源代码放入我的发行版本中,但也许有更好的方法可以做到这一点?

3 个答案:

答案 0 :(得分:5)

  

我的问题是:处理此类问题的最佳做法是什么   Python中的异构依赖?

在Node依赖项的情况下,我会在目录中包含一个package.json文件,该文件指定所需的Node依赖项。对于其他语言/包管理器,我也会使用任何指定依赖项的传统方法(例如为Ruby依赖项添加Gemfile)。

Python / Flask提出的另一个常见示例是使用Bower包管理器来实现静态前端依赖。在这种情况下,依赖关系在bower.json文件中指定,通常被拉入Flask的static目录中的bower文件夹。

  

我可以把我需要的所有javascript源都放到我的发行版中   本身,但也许还有更好的方法吗?

一旦你获得了指定了依赖项的package.json,就可以通过运行npm install获取并安装所需的所有Node依赖项,在我看来,这是一个比包括该项目的javascript源代码。

现在您已经拥有多个软件包管理器(例如,除了pip之外,您可能还需要npm用于Python依赖项以获取Node依赖项),您可能需要创建一个Makefile或者一些部署/构建脚本使用所有这些来获取/安装(例如,如果我使用Travis CI,除了.travis.yml之外,我还会更新npm install以呼叫pip install -r

答案 1 :(得分:1)

使用Node.js package.json将是处理JavaScript依赖项的最佳解决方案。至于从.py执行可执行文件,您可以参考此答案Running shell command from Python and capturing the output。默认情况下,节点依赖项位于./node_modules内,与package.json文件的位置位于同一目录中。

用于安装新的依赖项:

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

准备好后,此命令将为您安装所有内容:

npm install

节点依赖性绝对是处理事物的更优雅的方式,因为javascript是一个不断发展的世界,而且比简单地调用所述脚本的许多脚本标记/函数更容易看一下package.json。如果您想要一个自动化系统,我的建议是制作一个可执行文件(.sh),它将为两者运行分期付款,您可以在未来的项目中使用它。

答案 2 :(得分:0)

我建议使用webpack Webpack.js而不是Bowerjs。 NPM和他的package.json非常适合依赖更新,但是从node_modules引用库有点令人尴尬。