【问题标题】:gulp-uglify won't preserve files ordergulp-uglify 不会保留文件顺序
【发布时间】:2017-01-23 10:47:53
【问题描述】:

当我使用 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 行会更改 jqueryfunctions 文件的顺序,并将 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 中。

【问题讨论】:

    标签: javascript gulp minify uglifyjs gulp-uglify


    【解决方案1】:

    请尝试禁用功能提升:

    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'))
    });
    

    【讨论】:

    • 没有。结果相同。
    【解决方案2】:

    Karol Klepacki's answer 关于使用hoist_funs 是正确的,但这是UglifyJS compressor 的一个选项。因此,它需要在 compress 选项中提供:

    .pipe(uglify({
       preserveComments: 'license',
       compress: { hoist_funs: false }
    }))
    

    【讨论】:

    • 谢谢,成功了!对我来说,在它说的地方添加一行是至关重要的:compress: { lift_funs: false }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2014-12-01
    • 2014-08-26
    相关资源
    最近更新 更多