Gruntjs 如何使用不同的配置(以编程方式)运行相同的grunt任务?

Gruntjs 如何使用不同的配置(以编程方式)运行相同的grunt任务?,gruntjs,Gruntjs,在过去的两个小时里,我一直在网上搜寻,试图找出如何做到这一点,所以我在这里询问。我已经阅读了文档,但是我找不到一个好的例子,我想我可能正在实现某种反模式,或者我错过了一些非常基本的东西,但现在开始 我想循环一个数组,并在每个循环中执行此任务 grunt.task.run('string-replace:dist'); 然而,每次我运行这个循环时,我都需要一个稍微不同的配置。不同的输出文件夹、不同的替换阵列等 我一直在这样改变配置 grunt.config.set('string-repla

在过去的两个小时里,我一直在网上搜寻,试图找出如何做到这一点,所以我在这里询问。我已经阅读了文档,但是我找不到一个好的例子,我想我可能正在实现某种反模式,或者我错过了一些非常基本的东西,但现在开始

我想循环一个数组,并在每个循环中执行此任务

grunt.task.run('string-replace:dist');
然而,每次我运行这个循环时,我都需要一个稍微不同的配置。不同的输出文件夹、不同的替换阵列等

我一直在这样改变配置

  grunt.config.set('string-replace.dist.options.replacements', translationsArray);
  grunt.config.set('string-replace.dist.files.0.dest', 'dist/' + langCode + '/');
问题来了。Grunt似乎不执行任务,请等待任务完成,然后继续编写代码。因此,它为每个循环设置任务,但不运行它,然后每次都更改每个循环的配置,覆盖旧的配置。然后使用最后一个配置运行所有任务。我只想让Grunt执行任务,等待任务完成,更改配置,冲洗并重复


我真的在做傻事吗?Grunt文档似乎拼命地告诉我它是同步的,但
Grunt.task.run
似乎不是这样。我还想指出,我不想只注册更多具有不同选项的任务,因为我不知道可能需要运行此循环多少次。它由其他地方控制,因此可以是动态的和数据驱动的。除非我应该动态注册任务?

您会说“我不想用不同的选项注册更多的任务”(注意:我想您指的是“目标”而不是“任务”),所以动态创建任务。考虑配置<代码>字符串替换< /代码>任务,以便在 Grunt.InCONFIGG/<代码>中启动为空对象,例如<代码> Grut.InTunFig({“字符串替换”:{}});<代码>。然后创建一个,在其中循环数组,并根据……动态配置
字符串replace
任务和新的“目标”。。。。。。数组中定义的每个配置/设置。动态生成每个目标后,使用
grunt.Task.run(['string-replace'])
从同一自定义
RegisterTask
内部调用
string replace
任务-一旦调用了自定义
RegisterTask
,这将有效地运行
string replace
任务中定义的所有目标。然后,当您想要运行
字符串替换
任务时,可以调用自定义
注册表任务
。看到我的答案了吗。。。。。。显示了上述方法的
Gruntfile.js
示例-它应该有助于进一步理解。如果不知道要循环的“数组”是什么,就很难提供更具体的示例/答案-对于
translationsArray
数组也是如此。总之,;使用这种方法,您可以避免多次调用
grunt.task.run
,而是动态配置多个“目标”,并调用
grunt.task.run
一次,然后调用包含预定义/动态配置的“目标”的任务—所有操作都在自定义
注册表任务中完成,谢谢你的评论。我找到了一种方法,通过为每个循环注册一个新任务,并在调用字符串替换任务之前在其中设置配置选项,来实现我想要的。我理解你的方法,如果它比我目前的解决方案有好处的话,我可能会实施它。欢迎@lorless。请考虑把你的解决方案/方法作为一个答案,这样别人就可以从中受益。你说“我不想只登记更多的不同的任务”(注:我想你是指“目标”而不是“任务”),因此动态地创建了S。考虑配置<代码>字符串替换< /代码>任务,以便在 Grunt.InCONFIGG/<代码>中启动为空对象,例如<代码> Grut.InTunFig({“字符串替换”:{}});<代码>。然后创建一个,在其中循环数组,并根据……动态配置
字符串replace
任务和新的“目标”。。。。。。数组中定义的每个配置/设置。动态生成每个目标后,使用
grunt.Task.run(['string-replace'])
从同一自定义
RegisterTask
内部调用
string replace
任务-一旦调用了自定义
RegisterTask
,这将有效地运行
string replace
任务中定义的所有目标。然后,当您想要运行
字符串替换
任务时,可以调用自定义
注册表任务
。看到我的答案了吗。。。。。。显示了上述方法的
Gruntfile.js
示例-它应该有助于进一步理解。如果不知道要循环的“数组”是什么,就很难提供更具体的示例/答案-对于
translationsArray
数组也是如此。总之,;使用这种方法,您可以避免多次调用
grunt.task.run
,而是动态配置多个“目标”,并调用
grunt.task.run
一次,然后调用包含预定义/动态配置的“目标”的任务—所有操作都在自定义
注册表任务中完成,谢谢你的评论。我找到了一种方法,通过为每个循环注册一个新任务,并在调用字符串替换任务之前在其中设置配置选项,来实现我想要的。我理解你的方法,如果它比我目前的解决方案有好处的话,我可能会实施它。欢迎@lorless。请考虑将解决方案/方法作为答案,以便其他人从中受益。