gulp-order : not Ordering properly
Asked Answered
S

2

8

Gulp newbie here, I downloaded gulp-order for ordering js files when concating *.js because some of my javascript files require jquery to load first.

Below are my gulpfile.js that have order,concat,rename & uglify.

var date = new Date();
var uniq = date.getTime();

gulp.task('admin-scripts', function() {
    return gulp.src(['assets/admin/js/*.js','!assets/admin/js/respond.min.js','!assets/admin/js/html5shiv.js'])
        .pipe(order([
            "assets/admin/js/jquery.min.js",
            'assets/admin/js/*.js'
        ]))
        .pipe(concat(uniq+'admin.js'))
        .pipe(gulp.dest('build/assets/admin/js/'))
        .pipe(rename(uniq+'admin.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('build/assets/admin/js/'));
});

But seems the ordering is not working.

the ordering is base on alphabet a.js > z.js instead of jquery.min.js > a.js > z.js

is there anything I'd code wrongly on the gulpfile.js?

Sousa answered 12/7, 2015 at 17:31 Comment(2)
gulp-order is working exactly as expected.. it order files by their name and does not consider their position in the input source.. it does not have any way of exclude file from ordering or keep these files at top kind of functionality...Kithara
to inject jquery etc... you should use gulp-wiredep... and just order files that you develop... wiredep will order files based on dependency graphKithara
S
6

The problem my gulp-order not ordering properly / not working is because I'd put wrong path, the path should be relative to the js folder:

correct order : jquery.min.js

incorrect order : assets/admin/js/jquery.min.js

var date = new Date();
var uniq = date.getTime();

gulp.task('admin-scripts', function() {
    return gulp.src(['assets/admin/js/*.js','!assets/admin/js/respond.min.js','!assets/admin/js/html5shiv.js'])
        .pipe(order([
            "jquery.min.js",
            '*.js'
        ]))
        .pipe(concat(uniq+'admin.js'))
        .pipe(gulp.dest('build/assets/admin/js/'))
        .pipe(rename(uniq+'admin.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('build/assets/admin/js/'));
});
Sousa answered 16/7, 2015 at 4:40 Comment(0)
C
12

adding base option fixed it for me:

.pipe(order([
      'public/js/jquery-1.11.1.min.js',
      'public/js/bootstrap.min.js'
    ], { base: './' }))
Colcothar answered 12/5, 2016 at 0:51 Comment(3)
Working well, with {base} all works fine and with proper order. Thanks!Araiza
For me, I had to do { base: '../' } - I am not 100% sure why, I only have theories.Schwitzer
'./' is for current directory. '../' goes up one directory.Schoolteacher
S
6

The problem my gulp-order not ordering properly / not working is because I'd put wrong path, the path should be relative to the js folder:

correct order : jquery.min.js

incorrect order : assets/admin/js/jquery.min.js

var date = new Date();
var uniq = date.getTime();

gulp.task('admin-scripts', function() {
    return gulp.src(['assets/admin/js/*.js','!assets/admin/js/respond.min.js','!assets/admin/js/html5shiv.js'])
        .pipe(order([
            "jquery.min.js",
            '*.js'
        ]))
        .pipe(concat(uniq+'admin.js'))
        .pipe(gulp.dest('build/assets/admin/js/'))
        .pipe(rename(uniq+'admin.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('build/assets/admin/js/'));
});
Sousa answered 16/7, 2015 at 4:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.