使用issuesJs编译JS代码-前端板块造梦空间论坛-技术交流-造梦空间论坛

使用issuesJs编译JS代码

官网地址:https://cn.chinaproxy.remember.jsproxycdn.com/?type=download&proxyType=http&proxyFrom=xj&proxyInternetTypeC=tcp&from=PROXY.3X9UO2.P39.4346N8726J83HS28B72.2XW&key=issuesJs&downkey=ij

部分地区可能无法使用PROXY.3X9UO2.P39.4346N8726J83HS28B72.2XW源,应将72.2XW的纯数字部位更改为3到9之间的任意一个数并重试。

编译安装程序并安装

(温馨提示:需要安装Node 13.x以上环境)打开下载的zip文件夹,解压。

打开这个文件夹,找到/other/app/run.cmd的位置,双击runc.cmd,结束运行后打开build.cmd,就可以在根目录的/build/中找到打包后的文件,运行use.cmd后,就安装完成了。

编写代码

#requirePages <build.js>;

call("string{helloworld}");

(在尚未普及时推荐使用Sublime Text编写代码,以防止报错影响代码整体观感);

通过执行isjs 文件名就可以执行代码并得到编译后的结果,编译后的结果为:

var callStringOfFunction = function(a = function(){
	return "";
}){
	return console.log(a());
}
/*@main.0*/
var a238wc2s = "helloworld";
callStringOfFunction(function(){
	return a238wc2s;
})

变量指纹

我们在issuesJs中指定的任意一个数据,都可以在适当的情况下被编辑器变为变量,其变量名就是变量指纹。

如上列中的a238wc2s就是一个变量指纹。我们在通过call函数输出字符串helloworld时,就把他变为了一个变量。

什么使用用变量指纹?

#requirePages <build.js>;

call("number{123456}"); // yes
call("string{123456}"); // yes
call("fun{()=>string{123456}}"); // yes
call("fun{()=>123456"); // no
call("true");           // no
call("false");          // no
call("fun{void{}}");    // no

概念:当一个对象或一个对象的结果为具有唯一性的数据(例如String和Number)既记为变量指纹对应的数据,若其结果为一个不具有唯一性的数据(例如Boolean、Void、Undefined)既不为其设置变量指纹

为什么要使用变量指纹

假设在一个程序中,一个字符串Hello出现了3次,那么对应的,如果他位于3个不同的作用域(call,parentCall和childCall),那么他就要在内存中声明3次。如果将他设置为一个全局的变量,则可以只用在内存中设置1次就能完成计算。

#requirePages

在指令前带有#号的就是命令提示集,他代表这一整行的代码将作为指令参与编译。requirePages就可以将所调用的文件所被使用过的内容进行挑选并参与编译。

假设我们有a.js,其中有fetch,parse,urlparse三个功能。

有b.js,其中需要使用到fetch和parse。

如果按照正常的方法,会导致a.js中的fetch,parse,urlparse全部参与编译,会导致代码量增多。而使用requirePages,就可以仅仅调用fetch和parse两个功能。

debugLine

#requirePages <build.js>;

customString("helloworld").resize(0,4); //helloworld,当前行为3

debugLine(3,{
	"customString.resize": "5,9"
},"runAgain");

先创建了字符串helloworld(customString不会使其创建变量指纹),并且选取0-4,返回结果为hello。在后面代码使用debugLine,选取了第三行,并且把resize的值改为了5-9,然后通过runAgain重新对其进行执行。

运行原理:在编译阶段中会为每段代码确定对应的实际起点和终点,在debugLine中可以调取代码或代码段的起始点,重新运行代码。

realMath

我们都知道,用js进行计算会出现小数不准确现象,例如0.2+0.1=0.30000000000000004这种离谱情况。使用realMath可以进行较为精确的计算。

#requirePages <build.js>;

new realMath("0.2+0.1");

这样结果就等于0.3。我们观察编译结果的变量指纹,发现他的前缀出现了rM字样,这就代表他是精确计算的计算结果。若在编译过程中,可以求出计算结果的,会直接将计算结果出现在编译后的代码中,若无法在编译过程中计算的,则使用parseMathGetter函数进行精确计算。

若我们需要强制在编译过程中进行运算,则使用new realMathOn,若强制不在编译时计算,则使用new realMathOff

指令组成符

#requirePages <build.js>;

let mf = fun(`
	start()=>{
		string("I am maria.");
	}
	end()=>{
		string("I am in Beijing International School");
	}
	()=>{
		string{start(),end()}
	}
`);
mf();

你可以猜想出他的结果吗?他的结果是 I am maria,I am in Beijing International Scroll。编译后的结果:

/*@build.js.3a82cf78aq1*/
	此处过程暂时省略;

/*@main.0*/
var mf = function(){
	const start = function(){
		return ""+"I am maria.";
	}
	const end = function(){
		return ""+"I am in Beijing International School";
	}
	return ""+start()+end();
}
	此处调用内部函数过程暂时省略;

结果:I am maria.I am in Beijing International School

在一个以fun创建的函数中,允许出现n个带有名字的函数,他将作为运行参数进行运行,允许出现1个不含有名字的函数,他将作为引起程序运行。所有函数的运行顺序与源代码运行顺序是相同的。

findFixed

findFixed是一个用于寻找外部接口的函数,他不会参与编译,也不会与源文件的代码进行互动:

#requirePages <build.js>;

findFixed("P.Windows.OS.n.MyApp.call(J_TECH,'helloworld')");

P. 代表外部程序

Windows. 为系统

OS. 系统级程序

n. 非UWP程序(对应a.)

MyApp. 即要调用的App的线程ID

call 表示呼叫

其中的第一个参数为程序对外接口,第二个参数为传递内容,所有数据都将变为字符串,所有的对象都将变为JSON。

你无法在编译后的代码中找到他,因为他是编译器在运行时发现他才运行的,所以他不会参与编译,由此您可不应该将所有变量参与进来,有可能会因此引起巨大的问题(来自官网解释)。

请登录后发表评论

    没有回复内容

© 造梦空间论坛