【问题标题】:Grunt - Dynamically Set Config Before Running a TaskGrunt - 在运行任务之前动态设置配置
【发布时间】:2023-03-21 05:14:01
【问题描述】:

所以这是我假设的 fooTask 的假设配置对象,它对一堆 JS 文件执行某些操作(与问题无关)

grunt.initConfig({
  fooTask: {
    app1: 'app1/*.js',
    app2: 'app2/*.js',
    app3: 'app3/*.js'
  }
});

如您所见,使用这种方法,我必须运行 fooTask 3 次,并将每个应用程序指定为目标:

grunt fooTask:app1
grunt fooTask:app2
grunt fooTask:app3

不用说,这不会随着应用数量的增加或此类 foo 任务的数量增加而扩展,因为必须为每个应用一遍又一遍地 C&P 相同的代码。

所以理想情况下,我想定义的只是一个目标,其中应用程序的名称作为配置变量传入

grunt.initConfig({
  fooTask: {
    dist: '<%=appName%>/*.js'
  }
});

然后我想调用 fooTask 3 次,每个应用一个,将正确的应用设置为 appName

var apps = ['app1', 'app2', 'app3'];
apps.forEach(function(app) {
  var currAppName = app;

  // Run fooTask but how do I specify the new currAppName config?
  grunt.task.run('fooTask');
});

根据上面的代码,我知道我可以使用grunt.task.run 运行我的 fooTask,但是如何为我的任务设置 appName 配置?

请注意,这个问题与另一个还没有正确答案的问题类似 - Pass Grunt config options from task.run

非常感谢。

【问题讨论】:

    标签: javascript node.js build gruntjs


    【解决方案1】:

    编辑 2:

    所以不要介意第一次编辑下面的垃圾,作为不起作用的例子。就我而言,能够在运行时在任务中设置值非常重要,因此我选择了文件系统。也许它适合您的需求。

    grunt.initConfig({
      someTask: {
        someKey: fs.readFileSync('file.txt', { encoding: 'utf8' })
      }
    });
    

    当然,如果您需要一堆不同的应用名称,您可以在任务之外执行 readFile。


    编辑: 嗯。我发誓当我写这篇文章时我有这个工作......但现在它不是。 Grunt 只是将额外的参数视为额外的未找到任务。


    我自己试图弄清楚这一点,最后一个“duh”的时刻发生了——为什么不在grunt.initConfig 之前解析process.argv

    module.exports = function(grunt) {
    
      var sourcefile = process.argv[2] || 'default.js'; // <- this
    
      grunt.initConfig({
        uglify: {
          main: {
            src: sourcefile, // <- voila :)
            dest: sourcefile.substring(0, sourcefile.length-3) + '.min.js'
          }
        }
      });
    
      grunt.loadNpmTasks('uglify');
    
      grunt.registerTask('default', ['uglify']);
    };
    

    并从命令行使用:

    grunt mykillerscript.js
    

    我什至没有尝试使用 grunt.option ,原因与所有示例仅显示指示运行哪个任务的原因相同,但如果有更“grunt”的方式来执行此操作,我不会感到惊讶。

    【讨论】:

    • 刚刚意识到这并不能真正回答您关于 grunt.task.run 的问题 - 它仍然让我们的参数进入任务参数,更接近一步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多