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



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

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

这目前有效,但它非常俗气 - 它强制使用平面目录结构,并修改src/static中的文件(这与"static"所暗示的相反(。

我想最大限度地对事情进行python化,所以我考虑修改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源代码(,但这看起来同样专业,不太适合这种情况。

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

您可以将其滚动到自定义 manage.py 命令中。在这里查看官方的 Django 文档,这样每次服务器运行时脚本都会运行,从而始终生成干净的 js。

你可以有一个预提交钩子*,将coffescript编译成javascript。

因此,每次您在 coffescript 中提交更改时,javascript 版本都会更新。

*预提交钩子:执行此操作的方法取决于您使用的 VCS,以及您使用合理的 VCS。

也许看看 DukPy...它是一个简单的Python脚本解释器,可以编译CoffeeScriptTypeScriptBabelJSJSX。用法非常简单,只需像这样导入和编译:

import dukpy
dukpy.coffee_compile("CoffeeScript goes here!")

注意:DukPy是Python-CoffeeScript软件包的继承者,不再维护。

相关内容

最新更新