0

我有一组 .svg 文件。当我修改其中一个时,我希望 grunt 对每个已修改的 svg 文件重新运行命令

inkscape --file=FILENAME.svg --export-pdf=FILENAME.pdf

到目前为止,我有这个 grunt 脚本

module.exports = function (grunt) {
'use strict';
grunt.initConfig({
  shell: {
    figures: {
      command: 'inkscape --file=FILENAME.svg --export-pdf=FILENAME.pdf'
    }
  },
  watch: {
    figs: {
      files: '**/*.svg',
      tasks: ['shell:figures']
    }
  }
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-shell');

grunt.registerTask('default', [watch']);
};

但我不知道如何配置 grunt 以替换FILENAME每个已修改文件的名称。

4

1 回答 1

1

我使用在运行watch之前在事件上修改的配置变量解决了这个问题shell:figs

module.exports = function (grunt) {
  'use strict';
  // Project configuration
  grunt.initConfig({
    shell: {
      figs: {
        command: function() {
          return 'inkscape --file="' + grunt.config('shell.figs.src') + '" --export-pdf="' + grunt.config('shell.figs.src').replace('.svg', '.pdf') + '"';
        },
        src: '**/*.svg'
      }
    },
    watch: {
      svgs: {
        files: '**/*.svg',
        tasks: ['shell:figs'],
        options: {
        spawn: false,
        }
      }
    }
  });

  grunt.event.on('watch', function(action, filepath) {
    grunt.config('shell.figs.src', filepath);
  });

  // These plugins provide necessary tasks
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-shell');

  // Default task
  grunt.registerTask('default', ['connect', 'watch']);
};

唯一的缺点是shell:figs不能手动调用,只能在运行watch任务时使用,或者干脆grunt.

于 2016-05-31T12:21:26.133 回答