使用CoffeeScript / Cake组合和缩小模板

时间:2011-04-22 18:33:09

标签: coffeescript minify

我有一个充满胡子模板的src/templates/目录。我如何组合和缩小这些内容,以便它们可以在我的CoffeeScript应用程序中使用?

我已经按照https://github.com/jashkenas/coffee-script/wiki/%5BHowTo%5D-Compiling-and-Setting-Up-Build-Tools的说明将我的CoffeeScript src组合并缩小为js。

1 个答案:

答案 0 :(得分:7)

首先,我假设您的模板正在导出到全局对象(例如,每个模板都window.userpane =而不仅仅是userpane =)。这是最重要的事情。如果您正在这样做,并且您正在连接并成功编译,那么唯一剩下的就是在每次连接后自动缩小。

简短的回答:目前还没有好的工具。您最好的选择是使用类似

的行来扩展现有的Cakefile
fs.watchFile 'concatenated.js', ->
  exec 'uglifyjs concatenated.js'

(要安装UglifyJS,请运行npm install uglify-js。)

现在,这无法解决确保脚本以合理顺序连接的问题。 (例如,如果文件A中有window.templates = {}而文件B中有templates.userpane =,那么在文件B之前连接文件A非常重要。)为此,你应该留意{{ 3}},它允许您在每个JS文件的顶部指出它的依赖关系,然后按照尊重这些依赖关系的顺序组合它们。 Sprockets的创建者Sam Stephenson是CoffeeScript社区的活跃成员,Sprockets中对CoffeeScript的一流支持来自Sprockets 2(repo Sprockets)。

更新:这是一个Cake任务,用于实际读取和连接template目录中的所有内容:

templateJs = ''
files = fs.readdirSync 'template'
for file in files
  contents = fs.readFileSync file, 'utf8'
  name = file.replace /\..*/, '' # remove extension
  templateJs += "window.#{name} = '#{contents}';"

然后使用templateJs添加连接的JS。请注意,这假定模板中没有单引号(')。要么在它们前面加上反斜杠,要么一直使用双引号。