将模板与CoffeeScript/Cake组合并缩小

将模板与CoffeeScript/Cake组合并缩小,coffeescript,minify,Coffeescript,Minify,我有一个src/templates/目录,里面满是胡子模板。我将如何组合和缩小这些内容,以便在我的CoffeeScript应用程序中使用它们 我已经按照上的说明将CoffeeScript src合并并缩小为js。首先,我假设您的模板正在导出到全局对象(例如,每个模板都是window.userpane=,而不仅仅是userpane=)。这是最重要的。如果您这样做了,并且成功地进行了连接和编译,那么唯一剩下的就是在每次连接之后进行自动缩小 简短回答:目前还没有很好的工具来实现这一点。您最好的选择是使

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


我已经按照上的说明将CoffeeScript src合并并缩小为js。

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

简短回答:目前还没有很好的工具来实现这一点。您最好的选择是使用如下行扩展现有的Cakefile

fs.watchFile 'concatenated.js', ->
  exec 'uglifyjs concatenated.js'
(要安装,请运行
npm install uglify js

现在,这并不能解决确保脚本按合理顺序连接的问题。(例如,如果文件A中有
window.templates={}
,文件B中有
templates.userpane=
,那么在文件B之前连接文件A是非常重要的。)为此,您应该密切注意,这可以让您在每个JS文件的顶部指示其依赖关系,然后按照尊重这些依赖关系的顺序组合它们。Sprocket的创建者Sam Stephenson是CoffeeScript社区的活跃成员,Sprocket 2(repo)为Sprocket中的CoffeeScript提供了一流的支持

更新:这里有一个蛋糕任务,用于实际读取和连接
模板
目录中的所有内容:

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前面加上前缀。请注意,这假定模板中没有单引号(
)。要么在前面加反斜杠,要么始终使用双引号。

谢谢。我将尝试一下,看看它是如何进行的。因此,有一件事你的答案没有提到,那就是将我的模板的内容放入一个JS对象中(例如,
window.templates
)。模板文件只是简单的小胡子,所以我需要一个蛋糕任务来读取这些模板,将它们放在一个全局对象上,并在连接文件的开头插入。(另一个)我已经用一个蛋糕任务更新了我的答案,这个任务应该能解决大部分问题。剩下的就是类似地读入并编译
.coffee
文件,然后连接生成的JS。非常感谢!很抱歉反应太慢-所以没有回复通知让我抓狂。