uglify

js代码压缩

  1. 将code 转为AST
  2. 将AST进行优化,生成一个更小的AST
  3. 将新生成的AST再转为code

uglify - 图1

uglify 压缩原理

  1. // uglify-js的版本需要为2.x, 3.0之后uglifyjs不再暴露Compressor api
  2. // 2.x的uglify不能自动解析es6,所以这里先切换成es5
  3. // npm install uglify-js@2.x
  4. var UglifyJS = require('uglify-js');
  5. // 原始代码
  6. var code = `var a;
  7. var x = { b: 123 };
  8. a = 123;
  9. delete x`;
  10. // 通过 UglifyJS 把代码解析为 AST
  11. var ast = UglifyJS.parse(code);
  12. ast.figure_out_scope();
  13. // 转化为一颗更小的 AST 树
  14. compressor = UglifyJS.Compressor();
  15. ast = ast.transform(compressor);
  16. // 再把 AST 转化为代码
  17. code = ast.print_to_string();
  18. // var a,x={b:123};a=123,delete x;
  19. console.log("code", code);
  20. // a = 123 和 delete x都是表达式语句,所以分号被转换为逗号。
  21. // 而var x = {b:123}则因为是声明语句,所以和a=123不会合并,分号不会被转换。
  22. // 但var x = {b:123}和第一行var a又触发了另外一条规则,所以第一行和第二行会被合并为var a,x={b:123}

https://www.h5w3.com/19480.html