Gruntfile.js只会更改已更改的文件

时间:2013-10-30 16:59:33

标签: gruntjs

我正在尝试设置一个Gruntfile.js,它只会更新刚刚更改过的文件。我从

给出的问题和答案中改编了一些

How to uglify only changed file with Grunt.js watch task if dynamic expansion in Uglify has been enabled?

正如我所理解的那样,应该在监视事件上触发事件,然后将uglify任务src更改为当前文件路径。然而,GruntJS仍然会对所有文件进行整理,而不仅仅是刚刚更改过的文件。

我不确定我是否只是误解了GruntJS在这里工作的方式,但有人能说出我出错的地方吗?

var productionPath = "production", devPath = "dev";

module.exports = function(grunt) {
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
            },
            build: {
                expand: true,
                cwd: devPath + '/js/',
                src: ['**/*.js'],
                dest: productionPath + '/js/',
                ext: '.min.js'
            }
        },
        watch: {
            options: { spawn: false },
            scripts: {
                files: [devPath + '/**/*.js'],
                tasks: ['uglify']
            }
        }
    });

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

    grunt.event.on('watch', function(action, filepath, target) {
        grunt.config('uglify.build.src', filepath);
    });
};

1 个答案:

答案 0 :(得分:4)

你应该帮自己一个忙,在这种情况下使用grunt-newer可以让你轻松地做你想做的事。

理论上,您应该能够注册常规uglify任务和目标,然后只需将newer添加到其中。

grunt.registerTask('build', ['newer:uglify:something']);

或者只是在命令行中

grunt newer:uglify:something