grunt构建期间的XML文件预处理

时间:2015-07-06 19:55:03

标签: xml algorithm gruntjs environment-variables preprocessor

我们必须使用需要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>

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果代码驻留在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来简化更复杂方案的模板。

<强>参考