将这个简单的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破坏这些顶级函数名称,即f1
和f2
?我试过了:
额外的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'));
但一切都没有效果。
答案 0 :(得分:6)
.pipe(uglify({mangle: {toplevel: true}}))
答案 1 :(得分:5)
似乎uglify
不会破坏作为全局变量的函数名称(即使同时将' mangle'和toplevel
参数设置为true
)。无论如何,这样做对我来说似乎是不切实际的,因为HTML中的任何事件处理程序都不再起作用,而且你也无法(轻松地)从控制台调用函数,因为名称可能已经改变了。
如果这对您无关紧要,请尝试将代码包装在函数范围内:
(function(){
// your code here...
}());
这样uglify会破坏函数名称。
如果要让您的脚本无法访问,您还可以尝试使用Gulp的obfuscate
插件之一。