从git克隆uglifyjs2源码后,进入目录:

npm link

编译并安装uglifyjs2成功,就可以直接调用uglifyjs命令了。但是在进行全局混淆时出现了问题,虽然指定了文件topvar.json为全局变量的cache文件,还是出现:

1)全局变量混淆后的名字与局部变量的混淆名冲突;

2)不同全局变量的混淆名冲突。

查阅文档并做了一些测试,无奈都未成功。最终翻阅代码并做如下改动:

1)在scope.js文件中修改SymbolDef.prototype.mangle函数:

             // 为了避免混淆时TopLevel中的变量名与局部作用域中的变量名冲突, 对于Toplevel的变量增加前后缀双下划线
if (this.scope instanceof AST_Toplevel) {
console.log(this.name + "=>" + this.mangled_name);
this.mangled_name = "__" + this.mangled_name + "__";
}

对于全局变量的混淆,添加双下划线前后缀,避免冲突。在这修改之后,在计算next_mangled_name时需要过滤掉已经使用过的全局符号。

2)在函数next_mangled_name函数中增加如下处理:

     while (true) {
name = base54(++scope.cname);
// 双下划线过滤
if (in_use['__' + name + '__'] || !is_identifier(name) || member(name, options.reserved)) continue;
if (!names[name]) break;
holes.push(scope.cname);
}

如此这般之后,全局变量混淆的问题才算是彻底解决。

最新文章

  1. vue 2.0
  2. C中的数组与指针问题
  3. django1.4日志模块配置及使用
  4. PHP不同域名cookie共享(单点登录实现原理)
  5. redis 多数据库
  6. SSIS ->> 生成时间格式
  7. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
  8. HDOJ2017字符串统计
  9. 【HDOJ 1286】找新朋友
  10. 阿里云pai项目使用说明
  11. Java中为什么long能自动转换成float类型
  12. Mac超快速搭建Nginx、PHP、PHPStorm、XDebug环境
  13. Linux环境变量具体内容介绍
  14. SpringBoot与数据访问
  15. [leetcode]96. Unique Binary Search Trees给定节点形成不同BST的个数
  16. Postgresql之VACUUM和VACUUM FULL对比
  17. 【Spring】20、使用TransactionSynchronizationManager在spring事务提交之后进行一些操作。
  18. Springboot 使用 RestTemplate
  19. SkylineGlobe6.5版本,在矿山、石油、天然气等能源行业的最新应用DEMO演示
  20. 查找mac下腾讯视频下载地址

热门文章

  1. 通过jstl判断是否给value 赋值
  2. ffplay 播放m3u8 hls Failed to open segment of playlist 0
  3. pycharm5.0 激活方式
  4. Struts2使用POI创建Excel并下载
  5. B树的生成
  6. Ubuntu16.04下Django项目的部署
  7. kubernetes之创建基于名称空间的内存和cpu限额示例
  8. dsp-asic-fpga
  9. Markdown 语法的超快速上手
  10. 自动提交form表单