如何在Ember中混淆Javascript?
有人知道如何在余烬中使用(或类似的)吗 我想它需要在ember cli build.js中调用,但我不知道在哪里以及如何调用如何在Ember中混淆Javascript?,javascript,ember.js,ember-cli,obfuscation,Javascript,Ember.js,Ember Cli,Obfuscation,有人知道如何在余烬中使用(或类似的)吗 我想它需要在ember cli build.js中调用,但我不知道在哪里以及如何调用 提前感谢您的帮助:)我认为没有一个真正直截了当的答案。如果您正在运行,那么所有Javascript都将由webpack处理,因此您可以尝试在ember cli build.js中使用-- return require(“@symport/compat”).compatBuild(应用程序、网页包、{ 插件:[ 新的WebpackObfuscator(/*任意参数*/) ]
提前感谢您的帮助:)我认为没有一个真正直截了当的答案。如果您正在运行,那么所有Javascript都将由
webpack
处理,因此您可以尝试在ember cli build.js
中使用--
return require(“@symport/compat”).compatBuild(应用程序、网页包、{
插件:[
新的WebpackObfuscator(/*任意参数*/)
],
规则:[
{
测试:/\.js$/,,
执行:"岗位",,
用法:{
加载程序:WebpackObfuscator.loader,
}
}
]
});
我知道的其他选择是编写一个花椰菜插件。您所做的工作类似于ember cli terser
所做的工作——在将Javascript文件连接在一起之前对其进行后期处理——因此您可以将其用作参考
您需要编写一个花椰菜插件来实际执行转换(模拟为),并编写一个Ember插件将其挂接到Ember cli
的构建管道(模拟为)
花椰菜插件
看看brocoli-terser-sourcemap
的index.js
,它只有114行代码,我认为您可以将它改编成如下内容:
module.exports=class TerserWriter扩展插件{
构造函数(_inputNodes,options={}){
让inputNodes=Array.isArray(\u inputNodes)?\u inputNodes:[\u inputNodes];
超级(输入节点{
name:options.name,
注释:options.annotation,
尼德斯凯奇:错,
});
this.options=默认值(选项{
混淆器:{},
});
let exclude=this.options.exclude;
if(Array.isArray(排除)){
this.excludes=新匹配集合(exclude);
}否则{
this.excludes=MatchNothing;
}
}
异步构建(){
让pendingWork=[];
this.inputPaths.forEach(inputPath=>{
walkSync(inputPath).forEach(relativePath=>{
if(relativePath.slice(-1)=='/')){
返回;
}
设infie=path.join(inputPath,relativePath);
让outFile=path.join(this.outputPath,relativePath);
mkdirSync(path.dirname(outFile),{recursive:true});
if(this.isJSExt(relativePath)&&!this.excludes.match(relativePath)){
push(()=>this.processFile(infle、outFile、relativePath、this.outputPath));
}否则{
symlinkOrCopy.sync(填充、输出文件);
}
});
});
用于(让fn进行悬吊作业){
等待fn();
}
}
_isJSExt(相对路径){
返回relativePath.slice(-3)=='.js'| | relativePath.slice(-4)='.mjs';
}
异步进程文件(infle、outFile、relativePath、outDir){
让输入=等待读取文件(infle).toString();
让结果=模糊(输入,this.options.obfuscator);
等待writeFile(outFile,result.getObfuscatedCode());
}
};
您也可以像brocoli-terser-sourcemaps
那样进行工作者池,如果您关心源地图,您也需要处理它们,但是brocoli-terser-sourcemaps
正是这样做的,因此您可以将其用作参考
ember cli
addon
ember cli terser
的代码更少——看看它的index.js
,您可以将它调整为
“严格使用”;
module.exports={
名称:require('./包')。名称,
包括(应用程序){
这个._super.include.apply(这个,参数);
设默认选项={
已启用:app.env===“生产”,
模糊器:{
//默认的“javascript模糊器”选项
},
};
让addonOptions=app.options['ember-cli-obfuscator'];
这个._obfuscatorOptions=Object.assign({},defaultOptions,addonOptions);
},
后处理树(类型,树){
if(this.\u obfuscatorOptions.enabled==true&&type===all'){
//导入上面的插件代码
const Obfuscator=require('./花椰菜Obfuscator');
返回新的模糊器(树,此.\u模糊器选项);
}否则{
回归树;
}
}
};
然后你必须在你的应用程序中安装上面的插件(它可能是一个in-repo插件),并且它应该完成它的任务
这肯定需要做一些工作,但是您所做的与ember cli terser
所做的非常相似,只需使用obfuscator
API而不是terser
API,您就有了一个非常好的起点
但是,如果
symport
是您的一个选择,我肯定会首先尝试这一方法,因为这可能只是一个配置问题,而不是编写一堆代码。我认为没有一个真正直截了当的答案。如果您正在运行,那么所有Javascript都将由webpack
处理,因此您可以尝试在ember cli build.js
中使用--
return require(“@symport/compat”).compatBuild(应用程序、网页包、{
插件:[
新的WebpackObfuscator(/*任意参数*/)
],
规则:[
{
测试:/\.js$/,,
执行:"岗位",,
用法:{
加载程序:WebpackObfuscator.loader,
}
}
]
});
我知道的其他选择是编写一个花椰菜插件。您所做的工作类似于ember cli terser
所做的工作——在将Javascript文件连接在一起之前对其进行后期处理——因此您可以将其用作参考
您需要编写一个花椰菜插件来实际执行转换(模拟为),并编写一个Ember插件将其挂接到Ember cli
的构建管道(模拟为)
花椰菜插件
看看brocoli-terser-sourcemap
的index.js
,它只有114行代码,我认为您可以将它改编成如下内容:
模块