6

我正在开发一个 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'

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

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

4

3 回答 3

1

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

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

*pre commit hook:实现方式取决于您使用的 VCS,并取决于您使用的是健全的 VCS。

于 2012-05-15T12:14:43.160 回答
1

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

于 2012-05-16T10:17:44.773 回答
0

也许看看DukPy ...它是一个简单的 Python javascript 解释器,可以编译CoffeeScript、和. 用法很简单,导入编译如下:TypeScriptBabelJSJSX

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

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

于 2022-03-03T08:38:30.623 回答