Gruntjs 如何让grunt watch在不同的构建任务下重新加载HTML更改

Gruntjs 如何让grunt watch在不同的构建任务下重新加载HTML更改,gruntjs,grunt-contrib-watch,Gruntjs,Grunt Contrib Watch,我可以通过执行以下操作轻松设置Grunt文件以实时重新加载HTML和SCSS更改: watch: { options: { livereload: true, }, css: { files: ['scss/*.scss'], tasks: ['compass'] }, html: { files: ['index.html'], tasks: ['build'] }

我可以通过执行以下操作轻松设置Grunt文件以实时重新加载HTML和SCSS更改:

watch: {
    options: {
        livereload: true,
    },
    css: {
        files: ['scss/*.scss'],
        tasks: ['compass']
    },
    html: {
        files: ['index.html'],
        tasks: ['build']
    }
}
watch: {
    options: {
        livereload: true,
    },

    dev: {
        html: {
            files: ['<%%= yeoman.app %>/*.html',
                    '<%%= yeoman.app %>/**/*.html'],
            tasks: ['dev']
        },

        css: {
            files: ['<%%= yeoman.app %>/assets/scss/*.scss'],
            tasks: ['compass']
        }
    },

    dist: {
        html: {
            files: ['<%%= yeoman.app %>/*.html',
                    '<%%= yeoman.app %>/**/*.html'],
            tasks: ['build']
        },

        css: {
            files: ['<%%= yeoman.app %>/assets/scss/*.scss'],
            tasks: ['compass'],
        }
    }
}
但是,我有一个用于开发环境的构建任务:
dev
,还有一个用于生产环境的构建任务:
build
。因此,当HTML更改时调用
build
,将为生产构建站点,如果我只想要开发版本,这不是我想要的

理想情况下,我会这样做:

watch: {
    options: {
        livereload: true,
    },
    css: {
        files: ['scss/*.scss'],
        tasks: ['compass']
    },
    html: {
        files: ['index.html'],
        tasks: ['build']
    }
}
watch: {
    options: {
        livereload: true,
    },

    dev: {
        html: {
            files: ['<%%= yeoman.app %>/*.html',
                    '<%%= yeoman.app %>/**/*.html'],
            tasks: ['dev']
        },

        css: {
            files: ['<%%= yeoman.app %>/assets/scss/*.scss'],
            tasks: ['compass']
        }
    },

    dist: {
        html: {
            files: ['<%%= yeoman.app %>/*.html',
                    '<%%= yeoman.app %>/**/*.html'],
            tasks: ['build']
        },

        css: {
            files: ['<%%= yeoman.app %>/assets/scss/*.scss'],
            tasks: ['compass'],
        }
    }
}
再次调用
watch:dev
watch:dist
,但这样做的缺点是,我不想在更改少量SCS时重建整个站点


有什么方法可以实现我想要的吗?

尝试动态别名任务:

grunt.registerTask('watchit', function(type) {
  grunt.config('watch.html.tasks', type);
  grunt.task.run('watch');
});
然后用
grunt-watchit:build
grunt-watchit:dev
调用它,在两者之间切换


这里有更多信息:

感谢您指出,我没有联系到在这种情况下,这是一项动态任务。