导入使用javascript-obfuscator加密后的文件,报错Cannot find module “.“
创始人
2024-03-24 16:35:52
0

问题

有一个 Vue2 的组件项目,在webpack中使用 javascript-obfuscator 对打包文件进行加密输出;另一个项目,需要依赖该组件,引入加密后的打包输出文件,直接报错 Uncaught Error: Cannot find module "."。而引入没有经过加密的打包输出文件,则可以正常使用。

版本信息:

webpack:4.14.0,
webpack-obfuscator: 2.6.0,
javascript-obfuscator: 3.2.7,

原因

javascript-obfuscator 的配置不正确,在3.0.0的版本更新中配置项 ignoreRequireImports 更名为了 ignoreImports;但是在 javascript-obfuscator 的 README 说明文档里面,写的仍然是 ignoreRequireImports

github上的问题链接:https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1085

解决

方案1(推荐):
开启ignoreImports配置项

// webpack的配置文件内
const JavaScriptObfuscator = require('webpack-obfuscator');module.exports = {...plugins: [new JavaScriptObfuscator({controlFlowFlattening: false,deadCodeInjection: false,ignoreImports: true, // 这里设置为truestringArrayThreshold: 0.3,},[]),],
}

方案2:
另外单独使用 javascript-obfuscator 对webpack打包输出的文件进行加密,而不是使用webpack插件的方式进行。通过在打包输出文件的导出语句前插入 /* javascript-obfuscator:disable */ 来禁用导出语句的加密混淆,代替使用ignoreImports配置项。
ps:这是在不清楚配置项改名了的时候,使用的解决方案,放在这里记录一下

const fs = require('fs');
const exec = require('child-process-promise').exec;// 主要加密函数,传入打包后需要加密的文件路径
function codeObfuscate(filePath) {// 读文件fs.readFile(filePath, 'utf8', function (err, data) {if (err) throw err;const reg = /[a-z](?=.exports=require)/g;// 解决直接混淆后报错:Uncaught Error: Cannot find module "."let content = data.replace(reg, '/* javascript-obfuscator:disable */ $&');const reg2 = /(?<="use strict";)/g;// 解决部分引用不混淆content = content.replace(reg2, '$& /* javascript-obfuscator:enable */ ');// 写文件fs.writeFile(filePath, content, 'utf8', (err) => {if (err) throw err;// 进行混淆const obfuscatePromise = exec(`javascript-obfuscator ${filePath} --output ${filePath}`).then(() => {console.log("obfuscate success");}).catch((error) => {console.error('obfuscate failure', error);});});});
}

相关内容

热门资讯

全球一年卖出5000多万台!罗...   据界面新闻,记者从罗马仕员工处获悉,7月6日凌晨1点多,罗马仕正式发布停工停产放假通知。   通...
国家速滑馆人形机器人实训基地正... 来源:中国新闻网 中新网北京7月6日电 (记者 吕少威)一场激烈的3V3机器人足球比赛5日在北京北奥...
大理一幼童躺街上被快递货车碾压... 7月2日晚间,在云南大理市大展屯综合市场附近发生了一起车祸,一辆“中通快运”派件货车左转时后轮碾压到...
【报告】海外电动车专题研究:走... (转自:汽车之地)本篇报告多维度对欧洲电动车市场空间进行定性、定量测算,梳理了未来3 年各车企核心电...
“22年前竞得地块没拿到,企业... 澎湃新闻记者 谢寅宗因为一块15.383亩的土地,海口市美兰区政府、海口市自然资源和规划局(以下简称...
加拿大铝业协会CEO:若美国5... 财联社7月6日讯(编辑 卞纯)当地时间周六,加拿大铝业协会首席执行官Jean Simard表示,加拿...
促进文旅融合 贵州举办第三届遵... 转自:经济日报由贵州省委宣传部、贵州省文化和旅游厅指导的贵州习酒·2025第三届遵义海龙屯国际影像文...
国台办:启用M503航线W12... 今日,国务院台办发言人陈斌华答记者问。问:民航局今天宣布启用M503航线W121衔接航线。请问发言人...
“朋友之上,恋人未满”,如何拯... “朋友之上,恋人未满”,如何拯救暧昧期快速转正?如果想要快速转正的话,一定要有一个人主动一点挑明这段...
为什么我如果受了伤,伤口很难愈... 为什么我如果受了伤,伤口很难愈合,就连小伤口最少也要三个星期基因如此,有一部分人是这样的。建议赶紧去...