uglifyjs3.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /**
  2. * Uglifyjs3 Js压缩
  3. * @type {{compress}}
  4. */
  5. var UglifyJs3 = (() => {
  6. function get_options() {
  7. return {
  8. parse: {
  9. bare_returns: false,
  10. ecma: 8,
  11. expression: false,
  12. filename: null,
  13. html5_comments: true,
  14. shebang: true,
  15. strict: false,
  16. toplevel: null
  17. },
  18. compress: {
  19. arrows: true,
  20. booleans: true,
  21. comparisons: true,
  22. computed_props: true,
  23. conditionals: true,
  24. dead_code: true,
  25. drop_console: false,
  26. drop_debugger: true,
  27. ecma: 6,
  28. evaluate: false,
  29. expression: false,
  30. global_defs: {},
  31. hoist_funs: false,
  32. hoist_props: true,
  33. ie8: false,
  34. if_return: true,
  35. inline: true,
  36. keep_classnames: false,
  37. keep_fargs: true,
  38. keep_fnames: false,
  39. keep_infinity: false,
  40. loops: true,
  41. negate_iife: true,
  42. passes: 1,
  43. properties: true,
  44. pure_getters: "strict",
  45. pure_funcs: null,
  46. reduce_funcs: true,
  47. sequences: true,
  48. side_effects: true,
  49. switches: true,
  50. top_retain: null,
  51. toplevel: false,
  52. typeofs: true,
  53. unsafe: false,
  54. unsafe_arrows: false,
  55. unsafe_comps: false,
  56. unsafe_Function: false,
  57. unsafe_math: false,
  58. unsafe_methods: false,
  59. unsafe_proto: false,
  60. unsafe_regexp: false,
  61. unsafe_undefined: false,
  62. unused: true,
  63. warnings: false
  64. },
  65. mangle: {
  66. eval: false,
  67. ie8: false,
  68. keep_classnames: false,
  69. keep_fnames: false,
  70. properties: false,
  71. reserved: [],
  72. safari10: false,
  73. toplevel: false
  74. },
  75. output: {
  76. ascii_only: false,
  77. beautify: false,
  78. bracketize: false,
  79. comments: /@license|@preserve|^!/,
  80. ecma: 5,
  81. ie8: false,
  82. indent_level: 4,
  83. indent_start: 0,
  84. inline_script: true,
  85. keep_quoted_props: false,
  86. max_line_len: false,
  87. preamble: null,
  88. preserve_line: false,
  89. quote_keys: false,
  90. quote_style: 0,
  91. safari10: false,
  92. semicolons: true,
  93. shebang: true,
  94. source_map: null,
  95. webkit: false,
  96. width: 80,
  97. wrap_iife: false
  98. },
  99. wrap: false
  100. };
  101. }
  102. function show_error(e, param) {
  103. let row = 0, column = 0;
  104. if (e instanceof JS_Parse_Error) {
  105. let lines = param.split('\n');
  106. let line = lines[e.line - 1];
  107. row = e.line;
  108. column = e.col + 1;
  109. e = '压缩出错了:\n\n' + e.message + '\n' +
  110. 'Line ' + e.line + ', column ' + (e.col + 1) + '\n\n' +
  111. (lines[e.line - 2] ? (e.line - 1) + ': ' + lines[e.line - 2] + '\n' : '') + e.line + ': ' +
  112. line.substr(0, e.col) + (line.substr(e.col, 1) || ' ') +
  113. line.substr(e.col + 1) + '\n' +
  114. (lines[e.line] ? (e.line + 1) + ': ' + lines[e.line] : '');
  115. } else if (e instanceof Error) {
  116. e = e.name + ': ' + e.message;
  117. }
  118. return {
  119. error: e,
  120. errPos: {
  121. row: row,
  122. col: column
  123. }
  124. };
  125. }
  126. function compress(input) {
  127. try {
  128. return main();
  129. } catch (e) {
  130. return show_error(e, input);
  131. }
  132. function main() {
  133. if (!input) {
  134. return;
  135. }
  136. let res = minify(input, get_options());
  137. if (res.error) {
  138. throw res.error;
  139. }
  140. return {
  141. out: res.code || '/* 无内容输出! */'
  142. };
  143. }
  144. }
  145. return {
  146. compress: compress
  147. }
  148. })();