【问题标题】:Prevent gulp uglify from stripping out es6防止 gulp uglify 剥离 es6
【发布时间】:2019-01-09 23:13:12
【问题描述】:

我正在使用 gulp babel 编译 es6,但似乎 uglify 正在完全剥离我的 es6。运行时,我的命令行中没有任何错误。任何想法为什么会被剥离?

我的 gulp 任务如下所示:

gulp.task('scripts', function () {
  return gulp.src('src/js/*.js')
    .pipe(sourcemaps.init())
    .pipe(babel())
    .pipe(uglify())
    .pipe(sourcemaps.write('./'))
    .pipe(gulp.dest('dist/js'));
});

我的javascript:

document.addEventListener('DOMContentLoaded', function (event) {
  console.log('ready to es6!');
  const foo = 4;
});

输出、编译/丑化的 javascript:

"use strict";document.addEventListener("DOMContentLoaded",function(e){console.log("ready to es6!")});
//# sourceMappingURL=scripts.js.map

注意const foo = 4 被忽略了。删除 .pipe(babel()) 会导致 const 正确编译。

如果有帮助,devDependencies:

"devDependencies": {
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.3",
"browser-sync": "^2.26.3",
"gulp": "^3.9.1",
"gulp-babel": "^8.0.0-beta.2",
"gulp-sass": "^4.0.2",
"gulp-sourcemaps": "^2.6.4",
"gulp-uglify": "^3.0.1",
"node-sass": "^4.11.0"
}

【问题讨论】:

    标签: javascript gulp gulp-uglify gulp-babel


    【解决方案1】:

    UglifyJS(gulp-uglify 的依赖项)有一个压缩选项,默认情况下会删除未使用的变量。由于您从不引用 foo,因此已将其从压缩源中删除。

    来自UglifyJS2 docs

    压缩选项: unused (default: true) -- 删除未引用的函数和变量(简单的直接变量赋值不算作引用,除非设置为 "keep_assign"

    由于const foo = 4 是一个简单的直接变量赋值,它不会出现在您的压缩代码中。您可以假设您不需要未使用的代码或调整您的 gulp 文件:

    gulp.task('scripts', function () {
      return gulp.src('src/js/*.js')
      .pipe(sourcemaps.init())
      .pipe(babel())
      .pipe(uglify({
         compress: {
           unused: false
         }
       }))
      .pipe(sourcemaps.write('./'))
      .pipe(gulp.dest('dist/js'));
    });
    

    【讨论】:

    • 明白了。感谢您的回答。
    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多