【问题标题】:Grunt Command Line ParametersGrunt 命令行参数
【发布时间】:2013-11-21 17:13:33
【问题描述】:

我有一个 Grunt 构建文件。我的构建文件有一个如下所示的任务:

myTask: {
  options: {
    configFile: "config/default.js",
    args: {   }
  },
  dev: {
    configFile: 'config/local.js',
    options: { args: {} },
  },
  test: {
    configFile: 'config/remote.js',
    options: { args: {} }
  }
}

...

grunt.registerTask('customTask', ['myTask:dev']);
grunt.registerTask('customTask-Test', ['myTask:test']);

目前,我可以从命令行运行以下命令:

> grunt customTask

一切正常。但是,我需要添加执行以下操作的功能:

> grunt customTask --myParam=myValue

我需要查看“开发”任务目标中 myParam 的值。但是,我不知道该怎么做。 如果我能在 myTask:dev 运行时打印出 myParam 的值,我会很高兴。换句话说, 我想在运行时看到以下内容

> grunt customTask

> grunt customTask --myParam=hello
You entered hello

> grunt customTask-Test

> grunt customTask-Test --myParam=hello

我该如何做这样的事情?

【问题讨论】:

标签: gruntjs


【解决方案1】:

这一切都在grunt.option 页面中进行了解释。

在您的情况下,您可以通过以下方式获得 myParam 的值:

var target = grunt.option('myParam');

【讨论】:

  • 对于默认参数,您可以使用标准的 JavaScript 习惯用法:grunt.option('myParam') || 'defaultValue'
【解决方案2】:

我做了一个使用示例,我可以通过这个命令行传递我想要创建 css.min 的模块:

> grunt cssmin --target=my_module 

Gruntfile.js

module.exports = function(grunt) {    
 var module = grunt.option('target'); //get value of target, my_module
 var cssminPath = 'assets/' + module + '/css/all.css';

 grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    cssmin:{
        css: {
            files: [{
                    src: [
                        'bower_components/bootstrap/dist/css/bootstrap.min.css',
                    ],
                    dest: cssminPath
                }]
        }
    },
  });
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.registerTask('default', ['cssmin']);
}

【讨论】:

    【解决方案3】:

    另一种方式:您可以使用 process.argv 数组,就像在常规 Node 应用程序中一样。

    当然,GruntJS 是基于 NodeJS 构建的。

    我使用这种技术将我的 Grunt 命令行参数转发到由 grunt-nodemon 调用的 Node 进程。

    【讨论】:

      【解决方案4】:

      您也可以使用process.argv 数组从 grunt 读取命令行参数

      var args = process.argv;
      runScript(args[2], args[3]);
      

      第一个和第二个参数是node 命令和脚本名称。

      execute: {
          target: {
            options: {
               args : [arg1, arg2]
            },
            src: ['script.js']
          }
      }
      

      使用grunt-execute

      【讨论】:

      • 这是让我在initConfig 中的监视任务根据调用的任务而有所不同的好方法。我想根据任务的内容设置一个变量以传递给我的watch 任务,但在运行grunt.registerTask 之前,grunt.task.current.name 中没有任何内容。感谢您发布此信息!
      • 不客气,我很高兴在此评论中帮助了某人
      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 2021-02-14
      • 1970-01-01
      • 2017-01-25
      • 2014-08-25
      • 1970-01-01
      • 2016-03-25
      • 2014-10-09
      相关资源
      最近更新 更多