我正在使用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;
});
输出的、编译的/丑化的 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"
}
UglifyJS(gulp-uglify的依赖项)有一个压缩选项,默认情况下会删除未使用的变量。由于您从不引用foo
因此会将其从压缩源中删除。
来自 UglifyJS2 文档:
压缩选项:
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'));
});