gulp-uglify не сохраняет порядок файлов

Когда я использую gulp-uglify для минимизации файлов Javascript, порядок нарушается.

Допустим, у меня есть эта задача, работающая, как ожидалось:

var gulp = require('gulp');
var rename = require('gulp-rename');
var gp_concat = require('gulp-concat');

gulp.task('js', function() {
    gulp.src([
            './public/bower_components/jquery/dist/jquery.min.js',
            './public/js/functions.js',
        ])
        .pipe(gp_concat('combined.js'))
        .pipe(gulp.dest(path.js + '/dist'))
});

Добавление строки uglify изменяет порядок файлов jquery и functions и размещает functions.js над jquery.

var gulp = require('gulp');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var gp_concat = require('gulp-concat');

gulp.task('js', function() {
    gulp.src([
            './public/bower_components/jquery/dist/jquery.min.js',
            './public/js/functions.js',
        ])
        .pipe(gp_concat('combined.js'))
        .pipe(gulp.dest(path.js + '/dist'))
        .pipe(uglify({
            preserveComments: 'license'
        }))
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest(path.js + '/dist'))
});

Любое возможное решение? Конечно, functions.js — это просто простой файл Javascript с функциями, не заключенный в IIFE.


person Alvaro    schedule 15.09.2016    source источник


Ответы (2)


Карол Клепаки отвечает правильно об использовании hoist_funs, но это вариант для компрессор UglifyJS. Таким образом, он должен быть указан в опции compress:

.pipe(uglify({
   preserveComments: 'license',
   compress: { hoist_funs: false }
}))
person Sven Schoenung    schedule 15.09.2016
comment
Спасибо, это сработало! Для меня было жизненно важно просто добавить строку, в которой говорится: сжатие: { hoist_funs: false } - person vcoppolecchia; 06.06.2018

Попробуйте отключить подъем функций:

var gulp = require('gulp');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var gp_concat = require('gulp-concat');

gulp.task('js', function() {
    gulp.src([
            './public/bower_components/jquery/dist/jquery.min.js',
            './public/js/functions.js',
        ])
        .pipe(gp_concat('combined.js'))
        .pipe(gulp.dest(path.js + '/dist'))
        .pipe(uglify({
            preserveComments: 'license',
            hoist_funs: false
        }))
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest(path.js + '/dist'))
});
person Karol Klepacki    schedule 15.09.2016
comment
Нет. Тот же результат. - person Alvaro; 15.09.2016