Javascript 防止狼吞虎咽剥离es6

Javascript 防止狼吞虎咽剥离es6,javascript,gulp,gulp-uglify,gulp-babel,Javascript,Gulp,Gulp Uglify,Gulp Babel,我正在使用gulp babel编译es6,但似乎uglify正在完全剥离我的es6。运行此命令时,我的命令行中没有任何错误。你知道为什么这会被删掉吗 我的吞咽任务如下所示: gulp.task('scripts', function () { return gulp.src('src/js/*.js') .pipe(sourcemaps.init()) .pipe(babel()) .pipe(uglify()) .pipe(sourcemaps.write(

我正在使用gulp babel编译es6,但似乎uglify正在完全剥离我的es6。运行此命令时,我的命令行中没有任何错误。你知道为什么这会被删掉吗

我的吞咽任务如下所示:

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;
});
"use strict";document.addEventListener("DOMContentLoaded",function(e){console.log("ready to es6!")});
//# sourceMappingURL=scripts.js.map
输出的、已编译的/未编译的javascript:

document.addEventListener('DOMContentLoaded', function (event) {
  console.log('ready to es6!');
  const foo = 4;
});
"use strict";document.addEventListener("DOMContentLoaded",function(e){console.log("ready to es6!")});
//# sourceMappingURL=scripts.js.map
请注意,
const foo=4
被忽略。删除
.pipe(babel())
会导致
常量得到正确编译

如果有帮助,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"
}
UglifyJS(gulp uglify的依赖项)有一个压缩选项,默认情况下会删除未使用的变量。由于您从未引用
foo
,因此它将从压缩源中删除

发件人:

压缩选项:
未使用(默认值:true)
——删除未引用的函数和变量(简单直接变量赋值不算作引用,除非设置为
“保留赋值”

由于
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'));
});
UglifyJS(gulp uglify的依赖项)有一个压缩选项,默认情况下会删除未使用的变量。由于您从未引用
foo
,因此它将从压缩源中删除

发件人:

压缩选项:
未使用(默认值:true)
——删除未引用的函数和变量(简单直接变量赋值不算作引用,除非设置为
“保留赋值”

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

明白了。谢谢你的回答,明白了。谢谢你的回答。