0

Google Bazel 构建工具可以很容易地解释特定目录树中的每个 CoffeeScript 文件都需要编译为相应的输出 JavaScript 文件:

[genrule(
    name = 'compile-' + f,
    srcs = [f],
    outs = [f.replace('src/', 'static/').replace('.coffee', '.js')],
    cmd = 'coffee --compile --map --output $$(dirname $@) $<',
) for f in glob(['src/**/*.coffee'])]

但是假设有 100 个 CoffeeScript 文件,这将调用该coffee工具 100 次,从而为编译过程增加了许多秒。相反,如果可以向 Bazel 解释该coffee命令可以将许多输入文件作为输入,那么可以将文件批处理在一起并提供给更少的coffee调用,从而允许进程的启动时间分摊到更多的文件上,而不仅仅是一个文件。

有什么方法可以向 Bazel 解释coffee可以一次调用多个文件的方法吗?

4

1 回答 1

3

我没有使用过咖啡脚本,所以这可能需要调整(特别是--output @D部分),但这样的事情可能会起作用:

coffee_files = glob(['src/**/*.coffee'])

genrule(
    name = 'compile-coffee-files',
    srcs = coffee_files,
    outs = [f.replace('src/', 'static/').replace('.coffee', '.js') for f in coffee_files],
    cmd = 'coffee --compile --map --output @D $(SRCS)' % coffee)

请注意,如果仅更改了一个输入咖啡脚本文件,则将使用所有 100 个文件重新运行整个 genrule(与java_library具有 100 个输入 java 文件的 a 相同)。

于 2016-05-12T21:22:01.523 回答