用gulp uglify压缩后报错s is undefined是怎么回事?

Ice丶Wing
  • 407

使用原文件是没有任何问题的,使用用gulp压缩后的js就会报这个错误。

clipboard.png

gulp配置如下:

gulp.task("bab", function() {

var path = './cdn/public_html/4.0/js/member_activity.js'
var index = path.lastIndexOf("/")
var ToPath = path.slice(0, index);
return gulp.src(path)
    .pipe(sourcemaps.init())
    .pipe(babel({
        presets: ['es2015']
    }))
    .pipe(uglify(
        {
            compress:{
                drop_console: true,  // 过滤 console
                drop_debugger: true  // 过滤 debugger
            }
        }
    ))
    .pipe(rename({
        extname: '.min.js'
    }))
    .pipe(sourcemaps.write('./cdn/public_html/4.0/js/map'))
    .pipe(gulp.dest('./cdn/public_html/4.0/js'));

})

还想请有经验的大佬指点一下什么情况会导致这种操作。

回复
阅读 2.1k
3 个回答
✓ 已被采纳

压缩时会修改变量名的,比如你有一个变量名很有描述性,但很长,叫 iKnowWhatYouDoInLastSummer,那么压缩的时候就会尝试把它变成 a,这样就实现了 26 -> 1 的压缩比例。

但是你可能有很多文件互相依赖,只压缩其中一个,就会破坏其它文件对它的依赖,就会产生这种“某变量未定义”的问题。(当然也可能是其它问题,不过从你的描述来看,这种问题的可能性比较大)。

解决方案有两个:

  1. 使用 webpack 或类似的工具合并 JS,把依赖和被依赖一起改名
  2. 使用 mangle:false(也可能是其它配置项,忘记了,很不常用),不改变量名

member_activity.js 是否依赖了其他文件?
如果依赖了. 需要一同打包.

宣传栏