2013-09-25 56 views
2

我按照grunt.option页面上的说明为我的Gruntfile中的不同环境/目标创建了不同的配置,例如开发,暂存和生产。但是,这样做后,我发现我的任务默默地失败了。我在做什么Gruntjs目标错误?

我已经将问题简化为一个非常简单的例子。下面Gruntfile构建失败文件:

module.exports = function (grunt) { 
    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    less: { 
     dev: { 
     options: { 
      compress: true 
     }, 
     build: { 
      src: ['src/css/test.less'], 
      dest: 'build/css/test.css' 
     } 
     } 
    } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-less'); 
    grunt.registerTask('default', ['less:dev']); 
}; 

在我的终端输出如下:

$ grunt 
Running "less:dev" (less) task 

Done, without errors. 

但是,如果我用下面的Gruntfile,不出所料生成输出:

module.exports = function (grunt) { 
    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    less: { 
     options: { 
     compress: true 
     }, 
     build: { 
     src: ['src/css/test.less'], 
     dest: 'build/css/test.css' 
     } 
    } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-less'); 
    grunt.registerTask('default', ['less']); 
}; 

此Gruntfile的终端输出反映内置文件:

$ grunt 
Running "less:build" (less) task 
File build/css/test.css created. 

Done, without errors. 

我在第一个Gruntfile中做错了什么?我错过了这个task:target约定是什么?

回答

6

您的第一个Gruntfile - 如果您需要每个目标选项,则需要指定files对象。所以,你的代码将是这样的:

less: { 
    dev: { 
    files: { 
     "build/css/test.css": "src/css/test.less" 
    } 
    }, 
    production: { 
    options: { 
     compress: true 
    }, 
    files: { 
     "build/css/test.css": "src/css/test.less" 
    } 
    }, 
} 

基本上在第一Gruntfile build是一个不明物体。您的目标名称为dev,而grunt-contrib-less没有名为build的选项,所以Grunt不知道在哪里写文件。您的第二个Gruntfile可以工作,因为您将选项设置为全局。如果您需要每个目标选项,请使用上述代码。

+0

非常好,非常感谢你的简明解释! :) – Josh

+1

你非常欢迎。 :) – Ben

+0

谢谢你本,我也是带着这个问题来到这里的。很烦恼,非常感谢。 – Kurtosis