我们必须使用需要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合并库相结合,但在此之前,我想知道其他人如何处理这种情况。
提前致谢。
答案 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来简化更复杂方案的模板。
<强>参考强>