gruntjs - uglifyjs 不混淆全局变量

标签 gruntjs uglifyjs uglifyjs2

我正在使用 uglifyjs (通过 grunt)并试图混淆全局变量,但它不起作用。我正在使用 mangle 的“toplevel”选项。

想知道是否有人可以回答为什么?

绕过grunt并直接使用uglify,我使用的命令行是:

uglifyjs js/a.js -c -m toplevel -o dist/scripts.js

a.js的内容是:

foo = 5;

function bar() {
  var excellent = 10;

  var myvar = excellent*excellent;

  console.log('myvar = ' + myvar);
}

bar();

function useAGlobal() {
  console.log('foo = ' + foo);
}

useAGlobal();

丑化代码是:

function o(){var o=10,n=o*o;console.log("myvar = "+n)}function n(){console.log("foo = "+foo)}foo=5,o(),n();

我可以看到全局函数 bar()useAGlobal() 被混淆得很好,但为什么变量 foo 保持不变?

如果我将带有“var”关键字的 foo 声明为 var foo = 5;,那么它确实会被混淆。我在这里缺少什么?

谢谢!

最佳答案

当您在没有 var 的情况下执行 foo = 5 时,与作为声明的 var foo = 5 相比,它被视为赋值。赋值变量名不会被混淆的原因是它假设它是在全局范围内当前js之外的其他地方声明的。在浏览器中,全局范围内的所有内容都与window相关联。因此,如果您执行 location = 'http://www.google.com.au'; ,它会将您的浏览器发送到 google。如果位置被混淆,那么代码将无法正确运行。

关于gruntjs - uglifyjs 不混淆全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28007519/

相关文章:

angularjs - uglify 后 Angular-Bootstrap 模态背景不透明

javascript - 如何使用 RequireJS 优化器删除评论?

google-chrome - 如何使用 uglifyjs2 和 Ionic 加载 sourcemaps?

javascript - 如何在没有 Node.JS 的情况下运行 UglifyJS2

node.js - 如何保持/*!与 UglifyJS2 的评论?

javascript - Gruntfile 中 stylelint 的配置

javascript - 如何通过 grunt-nodemon 重启 node.js 服务器时输出时间戳?

gruntjs - Grunt 未定义

gruntjs - 为什么 Yeoman 构建时没有/styles/fonts?

javascript - 从本地文件夹在 Windows 上安装 Node uglifyjs