/**
* vm2@3.9.3
* 安装: nodejs
* 然后: npm install vm2 npm install canvas npm install jsdom
* 提示: 建议每一个编写完事的js 建议用fd的js调试工具压缩一下,减少占用行数
*
* 使用vm2之前,先修改vm2本地文件
*
* 1、修改vm.js里的
* // Create a new context for this vm.
* //原本下面这句话 const _context = createContext(undefined, {
* //被修改成了这句话 const _context = createContext(options, {
* //外界在new VM的时候 把全局变量通过对象形式传递过来,全局的context就会继承这个全局变量!
*
*
* 2、修改contextify.js里的 搜索Contextify.setGlobal =
* (1)、global[prop] = value;//Contextify.value(value); //这里是为了在调试代码里不显示proxy 已被代理
* (2)、去掉vm2特征global
* //下面这段屏蔽了
* Object.defineProperties(global, {
* global: {value: global},
* GLOBAL: {value: global},
* root: {value: global},
* isVM: {value: true}
* });
*
*
* 3、修改main.js里的
* //如果想让vm2报错不是内部错误,修改890行
* throw e;//this._internal.Decontextify.value(e); //原本是这句话throw this._internal.Decontextify.value(e); 改成了 throw e
*
* 关于vm2报错本地文件,但是找不到那个报错的调试文件解决方法:
* const {VM,VMScript} = require("vm2");//这个是修改过的
* const CodeGenerate = require("./node_tools/CodeGenerate.js");
* //内存的概念,并非真正的内存,只是变量存储。
* let Vm2Cfg = {memory:{prototypes:{},examples:{}},DefPrototype(prototypeName,constructor,basePrototype){}};
* let savepath = `${__dirname}/vm_testScript/VM2_debug.js`; //提前把文件路径保存到变量里。
* let code = CodeGenerate(path_,savepath); //把加载完事的文件code直接写到本地
* let vm = new VM();
* let catvm = Object.assign(Vm2Cfg,{vm:this});//内存配置导入
* vm.setGlobal("catvm",catvm);//导入到全局里,这里的名字随便改,整体形成代码形式的话。就不要随意修改了。
* vm.run(new VMScript(code,savepath)); //运行前 savepath 要保存到本地,那么调试报错时才能找到位置。
*
*
* VScode 环境联调配置nodejs执行配置文件内容 launch.json
* //运行js时添加nodejs配置文件 launch.json ,测试代码路径如下:
* //C:\Users\AdministratorLr\Desktop\NewCode3_2022_10_15\.vscode\launch.json
* //配置文件内容入下:
*
*{
* "version": "0.2.0",
* "configurations": [
* {
* "name": "v1 本地调试",
* "type": "node",
* "request": "launch",
* "program": "${workspaceFolder}/index.js", //它只是跟在可执行文件后面的 一个参数了,要调试的js代码,不管你想执行哪个配置文件,这里配置即可
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v2 浏览器无环境联调",
* "type": "node",
* "request": "launch",
* "program": "--inspect-brk", //它只是跟在可执行文件后面的 一个参数了
* "args": ["${workspaceFolder}/index.js"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* },
* {
* "name": "v3 cmd参数详解", //演示所有参数的含义 , 控制台执行的结果是: D:\nodejs\node.exe args1 args2 args3 args4 args5 所以根据想要的功能自行设定和删减
* "type": "node",
* "request": "launch",
* "program": "args3", //它只是跟在可执行文件后面的 一个参数了
* "args": ["args4", "args5"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeArgs": ["args1", "args2"],//它只是跟在可执行文件后面的 一个参数了
* "runtimeExecutable": "D:\\nodejs\\node.exe" // 这里是 v16 版本的node路径,不管你安装几个版本的node都可以指定全局配置。这里配置完就可以随意切换了
* }
* ]
*}
*
**/