在同步文件更改后运行grunt-nodemon一次

时间:2014-02-08 03:37:37

标签: node.js gruntjs grunt-contrib-watch nodemon grunt-concurrent

这是我的Gruntfile。我同时运行nodemon来运行我的应用程序并注意观察我的coffeescript中的更改。

Coffeescript获取src文件并将其转换为JS文件(目前为3,main.coffee,Person.coffee和Car.coffee)

我想让Nodemon在每次更改文件后重新启动,以使用最新保存的更改来运行它。

问题在于:当只有1 咖啡文件被修改时,运行咖啡将重新编译所有咖啡文件,这反过来会生成3个JS文件,这反过来会使nodemon重启3次。这是不可取的,因为我在使用网络请求的应用程序中工作,我不希望它失去控制。

是否可以让nodemon重启一次?

我想连接所有的JS文件,但这会混淆我的JS文件的模块性。

我还想过逐个“看”文件,但如果我达到50个文件就会变得很麻烦。

我该如何解决这个问题?

module.exports = function(grunt) {
    "use strict";

    grunt.initConfig({

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

        coffee: {
            dist: {
                join: true,
                expand: true,
                flatten: true,
                cwd: 'src/dist',
                src: ['*.coffee'],
                dest: 'dist',
                ext: '.js'
            },
        },

        watch: {
            dist: {
                files: ['src/dist/**/*.coffee'],
                tasks: 'coffee'
            },
        },

        concurrent: {
            dev: {
                tasks: ['nodemon', 'watch'],
            options: {
                logConcurrentOutput: true
            }
        }
        },
        nodemon: {
            dev: {
                script: 'dist/main.js',
            },
            options:{
                watch: "dist/**/*.js"
            }
        }
    });

    grunt.loadNpmTasks('grunt-concurrent');
    grunt.loadNpmTasks('grunt-contrib-coffee');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-nodemon');

    grunt.registerTask("default", ["coffee", "concurrent"]);
};

2 个答案:

答案 0 :(得分:1)

您可能需要使用delayTime option。问题是,它实际上并没有等待所有文件完成,它只是在重新启动之前等待一段时间,从而防止多次重启。

nodemon: {
    dev: {
        script: 'dist/main.js',
    },
    options:{
        watch: "dist/**/*.js",
        delayTime: 2000
    }
}

答案 1 :(得分:0)

您可以使用grunt-newer。然后在watch任务中,您可以指定只编译已更改的文件。

watch: {
    dist: {
        files: ['src/dist/**/*.coffee'],
        tasks: 'newer:coffee'
    },
}