用gulp uglify顶级功能

时间:2014-06-21 18:35:49

标签: javascript gulp uglifyjs

将这个简单的gulp示例用于uglification:

gulp.task('scripts', function() {
  // Minify and copy all JavaScript (except vendor scripts)
  return gulp.src(paths.scripts)
    .pipe(uglify())
    .pipe(concat('all.min.js'))
    .pipe(gulp.dest('build/js'));
});

如果您有两个文件:

档案f1.js

function f1(){
  var hello = 1;
  return hello;
}

档案f2.js

function f2(){
  return f1();
}

all.min.js中任务的结果是:

function f1(){var n=1;return n}
function f2(){return f1()}

如何让uglify破坏这些顶级函数名称,即f1f2?我试过了:

额外的uglify

return gulp.src(paths.scripts)
    .pipe(uglify())
    .pipe(concat('all.min.js'))
    .pipe(gulp.dest('build/js'))
    .pipe(uglify());

传递mangle选项

return gulp.src(paths.scripts)
    .pipe(uglify({mangle: true}))
    .pipe(concat('all.min.js'))
    .pipe(gulp.dest('build/js'));

传递顶级选项

return gulp.src(paths.scripts)
    .pipe(uglify({toplevel: true}))
    .pipe(concat('all.min.js'))
    .pipe(gulp.dest('build/js'));

但一切都没有效果。

2 个答案:

答案 0 :(得分:6)

.pipe(uglify({mangle: {toplevel: true}}))

答案 1 :(得分:5)

似乎uglify不会破坏作为全局变量的函数名称(即使同时将' mangle'和toplevel参数设置为true)。无论如何,这样做对我来说似乎是不切实际的,因为HTML中的任何事件处理程序都不再起作用,而且你也无法(轻松地)从控制台调用函数,因为名称可能已经改变了。 如果这对您无关紧要,请尝试将代码包装在函数范围内:

(function(){
  // your code here...
}());

这样uglify会破坏函数名称。

如果要让您的脚本无法访问,您还可以尝试使用Gulp的obfuscate插件之一。