Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ember中混淆Javascript?_Javascript_Ember.js_Ember Cli_Obfuscation - Fatal编程技术网

如何在Ember中混淆Javascript?

如何在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(/*任意参数*/) ]

有人知道如何在余烬中使用(或类似的)吗

我想它需要在ember cli build.js中调用,但我不知道在哪里以及如何调用


提前感谢您的帮助:)

我认为没有一个真正直截了当的答案。如果您正在运行,那么所有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行代码,我认为您可以将它改编成如下内容:

模块