Question

This is my Gruntfile. I run concurrently nodemon to run my application and watch to watch for changes in my coffeescript.

Coffeescript takes the src files and turns them into JS files (Currently 3, main.coffee, Person.coffee and Car.coffee)

I want my Nodemon to restart everytime once of those file changes, to run it with the latest saved changes.

Here is the problem: When just 1 coffee file is modified, running coffee will recompile all the coffee files, which in turn generate 3 JS files, which in turn makes nodemon restart 3 times. This is not desirable since im working in an application that uses net requests, and I don't want it to spin out of control.

Would it be possible to make nodemon restart just 1 time?

I thought of concatenating all the JS files, but that messes the modularity of my JS files.

I also thought of "watching" the files 1 by 1, but that can get cumbersome if I reach 50 files.

How can I solve this problem?

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"]);
};
Était-ce utile?

La solution

You probably need to use the delayTime option. The problem is, it doesn't actually wait for all files to finish, it simply waits some amount of time before restarting, thus preventing multiple restarts.

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

Autres conseils

You can use grunt-newer. Then in the watch task you can specify that you want to compile only files that changed.

watch: {
    dist: {
        files: ['src/dist/**/*.coffee'],
        tasks: 'newer:coffee'
    },
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top