1

私はこれで立ち往生しています。このタイプのタスクを含む gruntfile があります。

grunt.initConfig({

  shell: {
    // stub task; do not really generate anything, just copy to test
    copyJSON: {
      command: 'mkdir .tmp && cp stub.json .tmp/javascripts.json'
    }
  },

  uglify: {
    build: {
      files: {
        'output.min.js': grunt.file.readJSON('.tmp/javascripts.json')
      }
    }
  },

  clean: {
    temp: {
      src: '.tmp'
    }
  }
});

grunt.registerTask('build', [
  'shell:copyJSON',
  'uglify:build',
  'clean:temp'
]);

.tmp/javascripts.jsonもちろん、ファイルがないため、これは機能しません。

Error: Unable to read ".tmp/javascripts.json" file (Error code: ENOENT). 

ファイルが生成された後に変数を作成するという追加のタスクを実行しようとしましたが、次のようにglobals.javascriptandに保存しようとしましgrunt.option("JSON")た:

grunt.registerTask('exportJSON', function() {
    if (grunt.file.exists('.tmp/javascripts.json')) {
        grunt.log.ok("JSON with set of javascripts exist");
        grunt.option("JSON", grunt.file.readJSON('.tmp/javascripts.json'));
    }
    else {
        grunt.fail.warn("JSON with set of javascripts does not exist");
    };
});

grunt.initConfig({
    uglify: {
        build: {
            files: {
                'output.min.js': grunt.option("JSON")
            }
        }
    }
});

grunt.registerTask('build', [
    'shell:copyJSON',
    'exportJSON',
    'uglify:build',
    'clean:temp'
]);

そしていつも同じエラーWarning: Cannot call method 'indexOf' of undefined Use --force to continue.

これを理解する方法が本当にわかりません。何か案は?

4

1 に答える 1

1

構成オプションが実行された時点でのみ解決されるように設定する場合は、テンプレートを使用する必要があります。

http://gruntjs.com/configuring-tasks#templates

uglifyしたがって、タスクのfiles構成を次のように変更する必要があります。

files: {
    'output.min.js': "<%= grunt.option('JSON') %>"
}

uglifyを使用してタスクの構成を変更するオプションもありますgrunt.config.set

grunt.registerTask('exportJSON', function() {
    if (grunt.file.exists('.tmp/javascripts.json')) {
        grunt.log.ok("JSON with set of javascripts exist");
        files = grunt.file.readJSON('.tmp/javascripts.json');
        grunt.config.set(
            ['uglify', 'build', 'files', 'output.min.js'], files
        );
    } else {
        grunt.fail.warn("JSON with set of javascripts does not exist");
    }
});

その場合、uglifyタスクのfilesオプションは次のようにする必要があります。

files: {
    'output.min.js': ''
}
于 2013-10-23T19:47:17.620 に答える