Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gulp - Target all files in a folder and its subfolders

I'd like to be able to add a watch task in gulp to all of the js files in the frontend/js and any other js files below

 gulp.watch('./frontend/js/**/*.js', ['browserify']);

This will only target js files one folder deep

like image 844
Jamie Hutber Avatar asked Dec 17 '14 13:12

Jamie Hutber


2 Answers

It's supposed to match any number of subdirectories:

** If a "globstar" is alone in a path portion, then it matches zero or more directories and subdirectories searching for matches. It does not crawl symlinked directories.

https://github.com/isaacs/node-glob

Do you have symlinked directories in there?

Symlinks

I don't think you'll get gulp to natively traverse your symlinked directories. I recommend you take a look at node.js fs.readdir recursive directory search and see if any of those solutions can be applied to your use case. Nothing in the question or answers specifically addresses symlinks, so I don't know if there's a solution for you there or not. If you can get an array of dereferenced pathnames using one of those solutions, then you can just pass the array to gulp.src().

like image 162
JMM Avatar answered Oct 19 '22 11:10

JMM


I just did some testing - and this actually works just fine for me.

I currently have the following structure -

--apps
  --scripts
  ----test.js
  ----test-folder
  ------test2.js
  ------test-folder-deep
  --------test3.js
  --myApp
  ----scripts-symlinked (symlinked to apps/scripts)
  ----gulpfile.js

I set up my symlink folder (on Mac - from 'myApp' folder) using:

ln -s /Users/kandrews/apps/scripts ./scripts-symlinked

In my gulpfile.js I have the following:

var gulp = require('gulp'),
    jshint = require('gulp-jshint');

gulp.task('jshint', function () {
    gulp.src('./scripts-symlinked/**/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

gulp.task('watch', function () {
    gulp.watch('./scripts-symlinked/**/*.js', ['jshint']);
});

Works perfectly. I also tried this in a sub directory as well ('scripts/symlinked-scripts') and was successful as well.

like image 6
Kelly J Andrews Avatar answered Oct 19 '22 12:10

Kelly J Andrews