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 はファイルを書き込む場所を知りません。オプションをグローバルとして設定したため、2 番目の Gruntfile が機能します。ターゲットごとのオプションが必要な場合は、上記のコードを使用します。

于 2013-09-25T07:54:46.527 に答える