【问题标题】:grunt-processhtml Defining a variable number of filesgrunt-processhtml 定义可变数量的文件
【发布时间】:2013-11-21 23:29:35
【问题描述】:

我正在使用grunt-processhtml 在产品投入生产之前替换一些东西。诀窍是,我有多个由assemble 吐出的文件,我真的想将我的数据与我的 gruntfile 分开。看来我必须做一些事情来声明每个需要操作的文件:

    processhtml: {
      deploy: {
        options: {
          process: true,
        },
        files: {
          '/one_file.html': ['/one_file.html'],
          '/two_file.html': ['/two_file.html'],
          '/red_file.html': ['/red_file.html'],
          '/blue_file.html': ['/blue_file.html']
        }
      }
    }
    

您可以想象,这可能会很麻烦。

我知道对于大多数 grunt 特定的节点模块,您可以使用一些 globbing techniques,所以我对此进行了修改。

    processhtml: {
      deploy: {
        options: {
          process: true,
        },
        files: {
          '/**.html': ['/**.html']
        }
      }
    },

但这似乎也不起作用......有什么建议吗?

编辑:添加更多背景信息(以防我因树木而失去森林)

问题

我的开发环境有几个主要目标。

  • 使用非压缩文件在本地查看页面以进行调试(这适用于 html、css 和 js)
  • 旅行时完全离线工作的能力,而且经常没有互联网。这也可能具有使页面重新加载更快的副作用。我遇到的一些问题,以及我为什么来到 processhtml:
    • 使用 CDN 提供 jQuery 等服务。
    • Google 字体:如果我引用 google 字体,它会根据我的浏览器在现场生成 CSS……但由于我在本地安装了我正在开发的字体,所以我只想使用这些字体,所以我需要一种插入谷歌字体的方法。
  • 我希望能够在部署之前压缩和连接每个资产。

我是怎么做的(无论好坏)

那么,现在我将告诉你我设计的系统。我的项目中有三个顶级目录,其中存在三个不同的阶段

  1. src:这是我所有的汇编文件所在的地方。在这里,我有大量的 hbs 文件和部分文件,从而保持我的标记干燥,以及我在 YAML 中的最小数据(我喜欢,因为我可以让同事填写它)。

  2. dev:一旦文件被“组装”起来,它们就会出现在这个目录中。在这里它们是未压缩的,并且带有 livereload 的连接服务器从这里运行。

  3. deploy:此时,我有一个名为“preflight”的繁重任务,它将我所有的文件压缩下来,并消除任何杂物,留下一个超级流畅的流线型文件夹,为另一个 rsync 任务发送到生产环境做好准备.

无论如何,如果您有不同的方法来实现这一点。我很想听听:)

谢谢!

【问题讨论】:

  • 如果您可以与我们分享更多关于您在 Assemble 问题上尝试完成的工作,我们可能会有一个更简单的解决方案,不需要使用其他任务。
  • 好点!我也想知道。我将编辑我的问题以包含更多背景信息。
  • 太好了,感谢您提供更多信息。因此,grunt-processhtml 任务被用于将对非缩小资产(可能是多个链接或脚本标签)的引用替换为对缩小资产的引用(在这种情况下,多个链接标签将被替换为一个)。这是要点吗?
  • 没错。尽管我认为指出我也使用它来替换对离线事物(特别是谷歌字体)的一些引用可能很重要,但这些引用是在线部署的。一种简单的方法是在生成所有文件的部分中进行替换,但这会在尝试脱机工作时产生问题。
  • 感谢您提供更多详细信息,让我考虑一下,我认为 @doowb 和我可以想出一些办法 :-)

标签: gruntjs assemble


【解决方案1】:

写了一个方法来完成任务,然后又查了一些手册,我发现了这个:

http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically

我的 Gruntfile 配置包含一些看起来像这样的东西,它就像一个魅力:

    processhtml: {
      deploy:{
        options: {
          process: true,
        },
        files: [
          {
          expand: true,     
          cwd: 'deploy/',   
          src: ['**/*.html'],
          dest: 'deploy/',  
          ext: '.html'
        },
        ],
    }

【讨论】:

  • Grunt 关于文件处理的文档非常糟糕。这个答案的重点是expand: true。这将采用 src 表达式,确定每个文件的路径,并将目标路径 relative 设置为 dest。如果未指定目标,则文件将被更新/替换。
  • 如何排除特定文件夹?我要排除的文件夹是“_includes”,我想在这个答案的配置中添加这个排除
【解决方案2】:

counterbeing 的解决方案就像一个魅力!

@valerio0999 要排除文件夹,请使用“!” 'src' 上的否定运算符

processhtml: {
  deploy:{
    options: {
      process: true,
    },
    files: [
      {
      expand: true,     
      cwd: 'deploy/',   
      src: ['**/*.html', '!**/_includes/**'],
      dest: 'deploy/',  
      ext: '.html'
    },
    ],
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多