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
?
答案 0 :(得分: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(与带有100个输入java文件的java_library
相同)。