【问题标题】:XML file preprocessing during grunt buildgrunt 构建期间的 XML 文件预处理
【发布时间】:2015-08-07 16:58:09
【问题描述】:

我们必须使用需要 configuration.xml 文件的公司 JavaScript 库。我们需要支持多个配置文件,每个环境一个。我们有多个文件,并在 grunt 构建期间执行文件移动/重命名过程以选择并重命名正确的文件。我们希望避免使用多个文件。

对于 HTML,我们使用 grunt-processhtml:

<!-- build:js app.min.js -->
<script src="my/lib/path/lib.js"></script>
<script src="my/deep/development/path/script.js"></script>
<!-- /build -->

<!-- changed to -->
<script src="app.min.js"></script>

我们只对发布模式执行处理,因此开发人员将只使用顶部块,而发布将只使用底部块。

模板化似乎不是一个好方法,因为我们需要的不仅仅是变量替换。

This article 说明了一种方法,但 XML 修改将驻留在我不想要的代码中。我曾想过将这种方法与 XML 合并库结合起来,但在此之前我想知道其他人如何处理这种情况。

提前致谢。

【问题讨论】:

    标签: xml algorithm gruntjs environment-variables preprocessor


    【解决方案1】:

    如果代码位于 Gruntfile 本身中,则模板化将起作用。例如:

    function dynIncludes(env)
      {
      // Script 
      var appjs = '<script src="foo.js"></script>\n';
    
      // Minified script
      var appminjs = '<script src="foo.min.js"></script>\n';
    
      if(env !== "release")
        return appjs;
      else
        return appminjs;
      }
    
    
     copy:
       {
       dev:
        {
        options: {
                 process: function (content, srcpath, destpath) 
                   {
                   // Append script to each file in the src array
                   return content + "\n" + grunt.template.process(dynIncludes('dev') );
                   }
                 }
        },
       release:
        {
        options: {
                 process: function (content, srcpath, destpath) 
                   {
                   return content + "\n" + grunt.template.process(dynIncludes('release') );
                   } 
                 }
        }
      }
    

    这使用了复制任务的process 选项:

    将源文件内容、源文件路径和目标文件路径传递给该函数,其返回值将作为目标文件的内容。如果此函数返回false,则文件 复制将被中止。

    这可以与grunt.util.callbackify结合进行后处理:

    如果原始函数返回一个值,该值现在将被传递给回调,该回调被指定为所有其他预定义参数之后的最后一个参数。如果原始函数将值传递给回调,它将继续这样做。

    使用loDash 为更复杂的场景简化模板。

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多