我有一组.svg文件。 当我修改其中一个时,我希望grunt在每个被修改的svg文件上重新运行命令
inkscape --file=FILENAME.svg --export-pdf=FILENAME.pdf
到目前为止,我有这个笨拙的脚本
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
。
答案 0 :(得分: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
。