使用uglify并在gulp

时间:2017-01-13 10:08:32

标签: javascript gulp

我想缩小并丑化文件夹中的所有 *。js 文件,并根据特定条件使用 Gulp 将结果推送到另一个文件夹,就像我将 env 参数作为 prod 传递,然后只会发生这种情况:

这是我的 gulpfile.js

var gulp                    = require('gulp');
var gminify                 = require('gulp-minify');
var gif                     = require('gulp-if');
var guglify                 = require('gulp-uglify');
var args                    = require('yargs').argv;


gulp.task('minify_js', function(){
    return gulp
            .src('app/js/*.js')//TAKE ALL THE JS FILES FROM THE FOLDER  
            .pipe(gif(args.env === "prod", gminify()))//DO MINIFY ONLY IN CASE env === prod
            .pipe(gif(args.env === "prod", guglify()))
            .pipe(gulp.dest('dist/js'));//PASTES THEM TO dist/js folder after processing
});

现在运行这个我就像这样使用:

gulp minify_js --env prod

在这种情况下,只要我将 - env 值设为 prod ,就会生成缩小版本,但这不是 uglify 格式。

参考 app / js 内的 js 文件名为 test.js 其内容如下:

var abc = function(){
   console.log("This is just a test message");
};
abc();

运行后,在 dist / js 内生成2个文件,即 test.js (其内容相同)和 tests.min.js 其内容如下:

var abc=function(){console.log("This is just a test message")};abc();

看起来像缩小但不是 uglified

所以我的问题是我错过了什么?

仅供参考: 我已经安装 gulp,gulp-minify,gulp-if,gulp-uglify,yargs 作为开发依赖项

1 个答案:

答案 0 :(得分:3)

根据你的评论,我可以得出结论,你对缩小和丑化有不正确的理解。这是一个小例子:

没有缩小而不是丑化的例子:

/**
 * This class describe animal class
 *
 */
class Animal(name) {
  this.name = name !== false ? name : "animal";
}
function wrapName(name) {
  var length = name.length;
  return length < 5 ? "My name: " + name : name;
}

这里是缩小的例子:

class Animal(name){this.name=name!==false?name:"animal";}function wrapName(name){var length=name.length;return length<5?"My name: "+name:name;}

这是一个丑陋的例子:

class Animal(n){this.name=!!n?n:"animal";}function wrapName(n){return n.length<5?"My name: "+n:n;}

如您所见,丑化和缩小的示例看起来非常相似。只有区别在于uglify会(可以)将一些块范围的变量(例如函数参数)重命名为一个字母,或者执行一些替换,例如false!1true→{{ 1}}。

缩小的实现可以从一个库到另一个库不同,并且可能两次使用相同的函数调用,但名称不同。