【问题标题】:Combine and minify templates with CoffeeScript / Cake使用 CoffeeScript / Cake 组合和缩小模板
【发布时间】:2011-08-11 03:37:34
【问题描述】:

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

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

【问题讨论】:

    标签: coffeescript minify


    【解决方案1】:

    首先,我假设您的模板正在导出到全局对象(例如,每个模板都执行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 非常重要。)为此,您应该留意 Sprockets,它可以让您在每个 JS 文件的顶部指出其依赖项是什么,然后按照尊重这些依赖项的顺序组合它们。 Sprockets 的创建者 Sam Stephenson 是 CoffeeScript 社区的活跃成员,Sprockets 中对 CoffeeScript 的一流支持将在 Sprockets 2 (repo here) 中提供。

    更新:这是一个 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}';"
    

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

    【讨论】:

    • 谢谢。我会试一试,看看效果如何。
    • 所以你的答案没有解决的一件事实际上是将我的模板的内容放入一个 JS 对象(例如window.templates)。模板文件只是纯粹的小胡子,所以我需要一个 Cake 任务来读取这些模板,将它们放在一个全局对象上并插入到我的连接文件的开头。
    • (另一个)我已经用一个蛋糕任务更新了我的答案,该任务应该可以解决大部分问题。剩下的就是类似地读入并编译您的 .coffee 文件,然后连接生成的 JS。
    • 非常感谢!抱歉回复慢 - SO 没有回复通知让我发疯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多