如何在Python包的distutils安装的构建阶段编译CoffeeScript?

时间:2012-05-15 11:17:25

标签: python django coffeescript distutils pypi

我正在开发一个Python Django软件包,其前端组件使用了一些CoffeeScript。

现在,我有一个相当脑死的外部脚本来处理CoffeeScript编译。它只是为src / coffee /目录中的每个* .coffee文件运行coffee编译命令,并将输出存储在src / static / js中 - 这类似于python ./setup.py build_ext --inplace存储C扩展的构建的方式开发源代码树中的文件。

现在可行,但它非常俗气 - 它强制平面目录结构,并修改src / static中的文件(这与“静态”暗示的相反)。

我想最大限度地了解事物,所以我考虑修改distutils.ccompiler.CCompiler以运行coffee作为setup.py“build_ext”子命令的子命令 - 我正在设想能够做什么这样的事情:

% python ./setup.py build_coffee
% python ./setup.py build_coffee --inplace
% python ./setup.py build_ext --inplace # implying 'build_coffee --inplace'

...但我发现distutils的编译器API太过专注于C编译细微差别,在这种情况下没有模拟,例如我还查看了Cython的代码(特别是在Cython的CCompiler子类中,它将.pyx文件预处理为.c源代码)但这看起来同样专业,对于这种情况不太合适。

有没有人有一个很好的解决方案来使用distutils setup.py脚本编译CoffeeScript?或者,除非这是一个很好的替代建议?

2 个答案:

答案 0 :(得分:1)

你可以有pre-commit hook *将coffescript编译成javascript。

因此,每当您对coffescript进行更改时,都会更新javascript版本。

* pre commit hook:这样做取决于你使用的VCS,取决于你使用一个理智的VCS。

答案 1 :(得分:1)

您可以将其转换为自定义manage.py命令。 See the official Django documentation here这样,每次运行服务器时都会运行脚本,从而导致js的干净构建。