2

我按照grunt.option页面上的说明在我的 Gruntfile 中为不同的环境/目标(例如开发、登台和生产)创建不同的配置。但是,这样做后,我发现我的任务默默地失败了。

我已将问题简化为一个非常简单的示例。以下 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公约缺少什么?

4

1 回答 1

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"
    }
  },
}

基本上在你的第一个 Gruntfilebuild中是一个未知对象。您的目标已命名dev并且grunt-contrib-less没有名为的选项,build因此 Grunt 不知道在哪里写入文件。您的第二个 Gruntfile 有效,因为您将选项设置为全局。如果您想要每个目标选项,请使用上面的代码。

于 2013-09-25T07:54:46.527 回答