我正在开发一个 Python Django 包,它的前端组件使用了一些 CoffeeScript。
现在,我有一个相当脑残的外部脚本来处理 CoffeeScript 编译。它只是coffee
为 src/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 的好解决方案?或者,除此之外,一个好的替代建议?