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

fis*_*000 5 python django distutils pypi coffeescript

我正在研究一个Python Django软件包,其前端组件使用了一些CoffeeScript.

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

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

我希望最大限度地了解事物,所以我考虑修改distutils.ccompiler.CCompilercoffee作为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'
Run Code Online (Sandbox Code Playgroud)

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

有没有人有一个很好的解决方案用distutils setup.py脚本编译CoffeeScript?或者,除此之外,一个很好的替代建议?

Ada*_*gel 2

您可以将其纳入自定义的manage.py命令中。 请参阅此处的官方 Django 文档,这样每次服务器运行时都会运行脚本,始终会生成干净的 js 构建。