Gruntjs grunt processhtml定义可变数量的文件

Gruntjs grunt processhtml定义可变数量的文件,gruntjs,assemble,Gruntjs,Assemble,在产品投入生产之前,我用它来替换一些东西。诀窍是,我有一个可变数量的文件,这些文件是由我吐出来的,我真的想把我的数据与我的GrunFile分开。似乎我必须做一些事情来声明每个需要处理的文件: processhtml: { deploy: { options: { process: true, }, files: { '/one_file.html': ['/one_file.html'],

在产品投入生产之前,我用它来替换一些东西。诀窍是,我有一个可变数量的文件,这些文件是由我吐出来的,我真的想把我的数据与我的GrunFile分开。似乎我必须做一些事情来声明每个需要处理的文件:

    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的节点模块,您可以使用一些,所以我对此进行了修补

    processhtml: {
      deploy: {
        options: {
          process: true,
        },
        files: {
          '/**.html': ['/**.html']
        }
      }
    },
但这似乎也不起作用。。。有什么建议吗

编辑:添加更多背景信息(以防我因树木而失去森林) 问题 我的开发环境有几个主要目标

  • 使用非压缩文件本地查看页面以进行调试(这适用于html、css和js)
  • 能够在旅行时完全离线工作,并且经常没有互联网。这也会产生副作用,使页面重新加载更快。我在这方面遇到了一些问题,以及我为什么选择processhtml:
    • 使用CDN提供jQuery之类的服务
    • 谷歌字体:如果我引用谷歌字体,它会根据我的浏览器即时生成CSS。。。但是因为我的字体是本地安装的,所以我只想使用这些字体,所以我需要一种方法来保持谷歌字体的插入
  • 我希望能够在部署之前压缩和连接每个资产
我将如何应对(无论是好是坏) 那么,现在我将告诉你我设计的系统。在我的项目中,我有三个顶级目录,其中有三个不同的阶段

  • src:这是我所有汇编文件所在的地方。在这里,我有大量的hbs文件和部分文件,因此保持了标记的干燥,并使用YAML保存了最少的数据(这是我喜欢的,因为我可以让同事填写)

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

  • 部署:在这一点上,我有一个名为“preflight”的繁重任务,它压缩了我所有的文件,并去除了任何杂质,留下一个超级光滑的流线型文件夹,供另一个rsync任务发送到生产环境

  • 不管怎样,如果你有不同的方法来实现这一点。我很想听:)


    谢谢

    在编写完成任务的方法,然后进一步检查手册后,我发现:

    我的GrunFile配置包含如下内容,它的工作原理类似于一个符咒:

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

    counterbeing的解决方案很有魅力

    @瓦莱里奥0999 要排除文件夹,请使用“!”“src”上的否定运算符

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

    如果您能与我们分享更多关于您在组装问题上的努力,我们可能会有一个更简单的解决方案,不需要使用其他任务。这一点很好!我也想知道。我将编辑我的问题,以包括更多的背景。太好了,谢谢你的额外信息。因此,grunt processhtml任务用于将对非精简资产(可能是多个链接或脚本标记)的引用替换为对精简资产的引用(在这种情况下,多个链接标记将替换为一个)。这就是要点吗?没错。尽管我认为指出这一点可能很重要,我也在使用它来替换一些离线的引用(特别是谷歌字体),而这些引用是在线部署的。一个简单的方法是,在生成所有文件的分区中进行替换,但这会在尝试脱机工作时产生问题。感谢提供更多详细信息,让我考虑一下,我想@doowb和我可以想出一些办法:-)在我看来,关于文件处理的咕哝文档非常糟糕。这个答案的关键是
    expand:true
    。这将采用src表达式,确定每个文件的路径,并设置相对于dest的目标路径。如果未指定目标,则文件将就地更新/替换。如何排除特定文件夹?我要排除的文件夹是“\u includes”,我想在配置此答案时添加此排除