使Grunt自动删除已删除的文件

时间:2015-08-09 17:17:41

标签: html gruntjs pug

我使用Grunt自动转换我的玉文件。为此我使用这个脚本:

    jade: {
        compile: {
            options: {
                client: false,
                pretty: true
            },
            files: [{
                cwd: "_/components/jade",
                src: "**/*.jade",
                dest: "_/html",
                expand: true,
                ext: ".html"
        }]
        }
    }

我也有这个监视脚本运行:

    watch: {
        jade: {
            files: ['_/components/jade/**/*.jade'],
            tasks: ['jade']
        }
    }

这很好用。但是,当我删除玉文件时,html文件仍然存在。有没有办法在删除玉文件时让grunt删除相应的html文件?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,如果您删除foo.jade,还要删除foo.html正确吗?以下是使用grunt-contrib-cleangrunt-contrib-watch的完整示例:

首先观看.jade扩展名为grunt watch的所有文件。以某种方式修改监视文件时,会发出watch事件。如果事件为deleted,我们会采用文件路径,将扩展名更改为.html,将其设置为src任务的clean:jade值并运行任务。< / p>

module.exports = function(grunt) {
    grunt.initConfig({
        clean: {
            jade: {
                src: null
            }
        },
        watch: {
            jade: {
                files: ['*.jade'],
                options: {
                    spawn: false
                }
            },
        }
    });

    grunt.loadNpmTasks("grunt-contrib-watch");
    grunt.loadNpmTasks("grunt-contrib-clean");

    grunt.event.on('watch', function(action, filepath) {
        if (action === "deleted") {
            var file = filepath.slice(0, -5) + ".html";
            grunt.config.set('clean.jade.src', [file]);
            grunt.task.run("clean:jade");
        }
    });
};

有关详细信息,请参阅Using the watch event @ grunt-contrib-watch。请注意,spawn选项必须为false

  

如果您需要动态修改配置,则必须禁用spawn选项以使监视在相同的上下文中运行。

答案 1 :(得分:0)

你需要grunt-contrib-clean。但是这段代码清除了所有相同类型的文件并且缓慢地发出咕噜声,并且需要为每个任务配置特定的配置。因此,当grunt开始时,通常只使用干净的单次时间:

module.exports = function (grunt){

    grunt.initConfig({

        pckg: grunt.file.readJSON('package.json'),

        clean: { // Grun-contrib-clean tasks
            jade: ["dist/*.html"],
            all: ["dist"]
        },

        jade: {
            dist: {
                files: [{
                    expand: true,
                    cwd: 'src/templates',
                    src: ['**/*.jade'],
                    dest: 'dist',
                    filter: 'isFile',
                    ext: '.html'
                }]
            }
        },

        watch: {
            jade: {
                files: ['src/templates/**/*.jade'],
                tasks: ['clean:jade','jade']
            },

        }


    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', ['clean:all', 'jade', 'watch']);

};