UglifyJS的"use strict"语句

9
我正在使用与grunt-contrib-uglify任务连接的Grunt来缩小我的应用程序中的JavaScript。在缩小过程中,它除了第一个外,删除了每个'use strict'语句,因此我得到了一个巨大的JavaScript文件,其中顶部有'use strict'指令。
问题在于全局'use strict'指令使浏览器在"严格模式"下执行我在项目中使用的每个库的代码,并且这会导致错误,因为并非所有第三方代码都是为严格模式编写的。
有什么解决办法吗?

这并不容易解决,正如在UglifyJS2项目页面上此评论所记录的那样。 - Matthew Bakaitis
@rawry 你可以尝试使用下一个版本 https://github.com/mishoo/UglifyJS2 。看起来这个新版本已经解决了这个问题。 - Vishwanath
1个回答

7
如果您使用IIFE将您的所有脚本包装起来,那么grunt-contrib-uglify不会将该语句定位到停止位置,而是会将它留在您编写的每个IIFE中。
(function() {
    'use strict';

    // do stuff
})();

是的,这会增加一些代码量,但如果你压缩文件,这应该不是问题。此外,这将保留在全局范围之外定义的任何变量,从而带来更高效的代码。


刚意识到这个问题已经很古老了,非常抱歉! - Alexander Hripak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接