Search code examples
javascriptnode.jsgulpnodemon

how does the ignore parameter works in gulp and nodemon?


I'm trying to create a gulpfile that lint my personal javascript files (.js) but ignore any vendor/third party libaries.

My gulp file is listed below:

var gulp = require("gulp"),
    uglify = require("gulp-uglify"),
    jshint = require("gulp-jshint"),
    jasmine = require("gulp-jasmine"),
    nodemon = require("gulp-nodemon");


// lint JS files for bad habbits
gulp.task("lint", function () {
    gulp.src(["**/*.js", "node_modules/*"])
        .pipe(jshint())
        .pipe(jshint.reporter("default"));
});


gulp.task("nodemon", function () {
    nodemon({
            script: "server.js", 
            ext: "html css jade js", 
            ignore: ["node_modules/*"]
        })
        .on("change", ["lint"])
        .on("restart", function () {
            console.log("Change detected, restarting server ...");
        });
});

gulp.task("default",["nodemon"]);

When I run the "gulp default" command in my terminal it still lint the javascript files in the node_modules. I've tried variations of the glob syntax but I can't seem to achieve the desired behaviour.

Any idea where I've gone wrong?

Thanks.


Solution

  • The glob pattern you've set, node_modules/* only matches the files in the root of the node_modules directory, but not all the children with an highter depth. You need to set is as node_modules/**/*, this will match everything. I advice you however to only match js files, with node_modules/**/*.js.

    You also need to negate the pattern with !, gulp does not know that you want to do that, so it will look like:

    gulp.src(['**/*.js', '!node_modules/**/*.js'])
    

    For nodemon, following the same thing you can use the node_modules/**/* pattern.

    The library used by gulp for globbing is minimatch.