obfuscator.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const JavaScriptObfuscator = require("javascript-obfuscator");
  2. const fs = require("fs");
  3. // 配置
  4. const buildDir = "./dist/assets/";
  5. const getJsFileList = (dir) =>
  6. new Promise((resolve, reject) => {
  7. fs.readdir(dir, (err, files) => {
  8. if (err) return reject(`待混淆文件目录不存在!`);
  9. console.log("files:", files);
  10. return resolve(
  11. Promise.all(
  12. files
  13. .filter((fileName) => fileName.endsWith(".js"))
  14. .map(
  15. (fileName) =>
  16. new Promise((resolveInner) => {
  17. fs.readFile(dir + fileName, (err, data) => {
  18. console.log("err:", err);
  19. return resolveInner({ fileName, content: data.toString() });
  20. });
  21. })
  22. )
  23. )
  24. );
  25. });
  26. });
  27. getJsFileList(buildDir).then((list) => {
  28. console.log(
  29. `开始代码混淆...`,
  30. list.map((item) => item.fileName)
  31. );
  32. Promise.all(
  33. list.map(
  34. (it) =>
  35. new Promise((resolve) => {
  36. const obfuscationResult = JavaScriptObfuscator.obfuscate(it.content, {
  37. /** 这些都是配置 */
  38. // optionsPreset: "low-obfuscation",
  39. // disableConsoleOutput: false,
  40. // controlFlowFlattening: true,
  41. selfDefending: true,
  42. });
  43. fs.writeFile(
  44. buildDir + it.fileName,
  45. obfuscationResult.getObfuscatedCode(),
  46. (err) => {
  47. if (err) {
  48. return console.log(`混淆失败文件=>> ${it.fileName}`, err);
  49. }
  50. console.log(`已混淆完成文件=>> ${it.fileName}`);
  51. resolve(1);
  52. }
  53. );
  54. })
  55. )
  56. ).then(() => {
  57. console.log(`代码混淆完成!`);
  58. });
  59. });