├── .classpath ├── .gitignore ├── README.md ├── img └── usage.gif ├── lib └── commons-io-1.3.2.jar ├── node ├── README.md ├── index.js ├── lib │ └── JSApiPropReplace.js ├── package-lock.json ├── package.json ├── test │ └── test.js └── wx2ali.txt ├── runfile ├── translation.bat ├── wx2ali.jar └── wx2ali.txt ├── src └── com │ └── text │ └── parser │ └── Wx2Ant.java └── wx2ali.txt /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .settings 2 | .project 3 | bin 4 | node/node_modules 5 | xx 6 | node/package-lock.json 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 微信小程序转支付宝小程序 # 2 | **现在只进行node版本更新 java版本已经舍弃** 3 | 4 | ## 说明: ## 5 | 6 | 这是一个将微信小程序中的大多数与支付宝小程序功能相关,格式相似的api与属性转化为支付包小程序的格式 7 | 其中包含了json、js、wxml的转换,但是转换只是治标并不治本,所以转化结束的源码中的一些错误还是需要靠自己进行解决。 8 | 该程序可以给你的代码迁移省下一部分的精力。 9 | 配置文件中的配置已经长时间未进行更新,如有问题,烦请反馈了。 10 | 11 | ## 环境配置: ## 12 | node.js 13 | ## 安装 ## 14 | npm i wx2ali -g 15 | 16 | ## 使用 ## 17 | **如果是旧版本请命令行中输入npm update wx2ali -g进行更新 以获得更好的服务** 18 | 19 | 1. 复制微信小程序的源码一份; 20 | 1. wx2ali --getConfig获取配置文件路径 按照需要修改配置并保存 21 | 1. wx2ali --start 22 | 1. 等待处理完成。 23 | 1. 或者可以通过 wx2ali --path path路径 开始转换 24 | 25 | 26 | usage.gif 27 | 28 | 29 | ## 注意事项 ## 30 | 31 | 1. 因为是用正则表达式进行转换,所以已经转换过的文件请不要进行二次转换,防止发生不必要的麻烦。 32 | 多发生在js文件中。 33 | 2. 如果是mac,请将/usr/local/lib/node_modules/wx2ali/wx2ali.txt 复制到 /usr/local/bin/目录下,之后就是按顺序执行‘使用’步骤即可[#5](https://github.com/foxitdog/wx2ali/issues/5 "mac环境下转换无配置文件") 34 | 35 | ## 文件: ## 36 | node 37 | --wx2ali.txt //配置 38 | --package.json 39 | --index.js //源码 40 | lib 41 | --JSApiPropReplace.js //api属性替换 42 | [点击进入github](https://github.com/foxitdog/wx2ali "wx2ali转换") 43 | 44 | ## 转换原则: ## 45 | 46 | 1. 从wxmp(微信小程序)转成antmp(支付宝小程序) 47 | 1. wxmp有而antmp没有的属性、接口 不进行转换 48 | 1. antmp有而wxmp没有的属性、接口 不进行转换 49 | 1. wxmp中的接口、属性与antmp中的接口、属性 如果功能相同而名称不同的则进行转换 50 | 1. 所有文件大体都有正则表达式进行转换 51 | 2. js文件有进行过ast转换 可以转换到方法名称 52 | 53 | ## 更新: ## 54 | v1.1.7 55 | 解决babel-plugin-transform-object-rest-spread插件未找到问题 56 | https://github.com/foxitdog/wx2ali/issues/9 57 | v1.1.6 58 | 解决:转换es6扩展运算符出错 59 | v1.1.5 60 | 修复wxss文件中会import wxss文件,这个没有被转换 https://github.com/foxitdog/wx2ali/issues/4 61 | 将require类型的导入替换成import类型的导入 62 | 将module.exports类型的导出替换成export default 类型的导出 https://github.com/foxitdog/wx2ali/issues/2 63 | ------------------------ 64 | v1.1.4 65 | wx2ali.txt规则修改 66 | 修复多匹配问题 https://github.com/foxitdog/wx2ali/issues/3 67 | ------------------------ 68 | v1.1.3 69 | wx2ali.txt规则增加 70 | axml文件转换更为彻底 71 | ------------------------ 72 | v1.1.2 73 | wx2ali.txt规则增加 74 | js文件的转换更为彻底 75 | 待完成的工作: 76 | axml文件的转换 77 | ------------------------ 78 | v1.1.1 79 | 添加js文件api中的差异转换 80 | ------------------------ 81 | v1.0.2 82 | 添加json文件转换 83 | 添加js文件简单转换 84 | 添加axml文件简单的转换 85 | 86 |
有问题可以联系895423140@qq.com 或者提交issue。
87 | 88 | -------------------------------------------------------------------------------- /img/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxitdog/wx2ali/eec468862a8563ed3d1edf79e22aa9ee610321b9/img/usage.gif -------------------------------------------------------------------------------- /lib/commons-io-1.3.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxitdog/wx2ali/eec468862a8563ed3d1edf79e22aa9ee610321b9/lib/commons-io-1.3.2.jar -------------------------------------------------------------------------------- /node/README.md: -------------------------------------------------------------------------------- 1 | # 微信小程序转支付宝小程序 # 2 | ###说明:### 3 | 这是一个将微信小程序中的大多数与支付宝小程序功能相关,格式相似的api与属性转化为支付包小程序的格式 4 | 其中包含了json、js、wxml的转换,但是转换只是治标并不治本,所以转化结束的源码中的一些错误还是需要靠自己进行解决。 5 | 该程序可以给你的代码迁移省下一部分的精力。 6 | ## 环境配置: ## 7 | node.js 8 | ## 安装 ## 9 | npm i wx2ali -g 10 | 11 | ## 使用 ## 12 | **如果是旧版本请命令行中输入npm update wx2ali -g进行更新** 13 | 14 | 1. 复制微信小程序的源码一份; 15 | 1. wx2ali --getConfig获取配置文件路径 按照需要修改配置并保存 16 | 1. wx2ali --start 17 | 1. 等待处理完成。 18 | 1. 或者可以通过 wx2ali --path path路径 开始转换 19 | 20 | 21 | ## 注意事项 ## 22 | 23 | 因为是用正则表达式进行转换,所以已经转换过的文件请不要进行二次转换,防止发生不必要的麻烦。 24 | 25 | 多发生在js文件中。 26 | 27 | ## 文件: ## 28 | node 29 | --wx2ali.txt //配置 30 | --package.json 31 | --index.js //源码 32 | lib 33 | --JSApiPropReplace.js //api属性替换 34 | [点击进入github](https://github.com/foxitdog/wx2ali "wx2ali转换") 35 | 36 | ## 转换原则: ## 37 | 38 | 1. 从wxmp(微信小程序)转成antmp(支付宝小程序) 39 | 1. wxmp有而antmp没有的属性、接口 不进行转换 40 | 1. antmp有而wxmp没有的属性、接口 不进行转换 41 | 1. wxmp中的接口、属性与antmp中的接口、属性 如果功能相同而名称不同的则进行转换 42 | 1. 所有文件大体都有正则表达式进行转换 43 | 2. js文件有进行过ast转换 可以转换到方法名称 44 | 45 | ## 更新: ## 46 | v1.1.7 47 | 解决babel-plugin-transform-object-rest-spread插件未找到问题 48 | https://github.com/foxitdog/wx2ali/issues/9 49 | v1.1.6 50 | 解决:转换es6扩展运算符出错 51 | v1.1.5 52 | 修复wxss文件中会import wxss文件,这个没有被转换 https://github.com/foxitdog/wx2ali/issues/4 53 | 将require类型的导入替换成import类型的导入 54 | 将module.exports类型的导出替换成export default 类型的导出 https://github.com/foxitdog/wx2ali/issues/2 55 | ------------------------ 56 | v1.1.4 57 | wx2ali.txt规则修改 58 | 修复多匹配问题 https://github.com/foxitdog/wx2ali/issues/3 59 | ------------------------ 60 | v1.1.3 61 | wx2ali.txt规则增加 62 | axml文件转换更为彻底 63 | ------------------------ 64 | v1.1.2 65 | wx2ali.txt规则增加 66 | js文件的转换更为彻底 67 | 待完成的工作: 68 | axml文件的转换 69 | ------------------------ 70 | v1.1.1 71 | 添加js文件api中的差异转换 72 | ------------------------ 73 | v1.0.2 74 | 添加json文件转换 75 | 添加js文件简单转换 76 | 添加axml文件简单的转换 77 | 78 |
有问题可以联系895423140@qq.com 或者提交issue。
79 | 80 | -------------------------------------------------------------------------------- /node/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | let fs = require("fs"); 3 | let path = require("path"); 4 | let readline = require('linebyline'); 5 | let arg = process.argv; 6 | let configpath = path.resolve(__dirname, "wx2ali.txt"); 7 | let dirPath=""; 8 | if(arg[2]){ 9 | if(arg[2]==="--start"){ 10 | 11 | }else if(arg[2]==="--getConfig"){ 12 | console.log("配置路径:"+configpath); 13 | console.log("记得修改工作目录后保存配置 并且备份需要进行的转换工程"); 14 | return; 15 | }else if(arg[2]==="--path"){ 16 | if(arg[3]){ 17 | try { 18 | fs.accessSync(arg[3]); 19 | dirPath=arg[3]; 20 | } catch (error) { 21 | if(error.code==="ENOENT"){ 22 | console.log("没有该文件或目录"+arg[3]); 23 | }else{ 24 | console.log(error); 25 | } 26 | return ; 27 | } 28 | }else{ 29 | console.log("请输入工作目录 如:wx2ali --path 'c:\\ab'"); 30 | return ; 31 | } 32 | } 33 | else{ 34 | console.log("你可以输入wx2ali --getConfig 获取配置文件路径 然后修改配置文件"); 35 | console.log("你可以输入wx2ali --path 以输入的path为工作路径开始转换"); 36 | console.log("你可以输入wx2ali --start开始转换(以配置中的路径为工作目录)"); 37 | return; 38 | } 39 | }else{ 40 | console.log("你可以输入wx2ali --getConfig 获取配置文件路径 然后修改配置文件"); 41 | console.log("你可以输入wx2ali --path 以输入的path为工作路径开始转换"); 42 | console.log("你可以输入wx2ali --start开始转换(以配置中的路径为工作目录)"); 43 | return; 44 | } 45 | let rl = readline(configpath); 46 | let JSAPR=require("./lib/JSApiPropReplace.js") 47 | let Order = 0; 48 | /** 49 | * 将符合后缀的文件copy和修改后缀名为指定的后缀。e.g. 50 | * addUpdateSuffix(".wxml",".axml");将会copy指定目录下所有的.wxml后缀的文件为.axml后缀的文件 51 | */ 52 | const UPDATAANDCOPY = 1; 53 | /** 54 | * 删除指定后缀的文件 e.g. addUpdateSuffix("abc.xml")将会删除指定目录下所有的abc.xml 55 | */ 56 | const DELETEFILE = 2; 57 | /** 58 | * 将符合后缀的文件替换为指定的后缀 e.g. 59 | * addUpdateSuffix(".wxml",".axml");将会修改指定目录下所有的.wxml为.axml 60 | */ 61 | const UPDATESUFFIX = 3; 62 | /** 63 | * 微信小程序转阿里小程序 js文件主要是进行库名的修改,即'wx.'-->'my.' 方法名替换使用addUpdateMethods()添加更换的方法 64 | * e.g. addUpdateMethods("request","httpRequest") 将request转换成httpRequest 65 | * axml文件主要进行 属性名称的修改,即'wx:'-->'a:' 66 | */ 67 | const WX2ANT = 4; 68 | const config = { 69 | dir: "", 70 | suffix: [], 71 | toSuffix: [], 72 | methods: [], 73 | toMethods: [], 74 | JSRegexp: [], 75 | JSToRegexp: [], 76 | AXMLRegexp: [], 77 | AXMLToRegexp: [], 78 | JSONRegexp:[], 79 | JSONToRegexp:[], 80 | ACSSRegexp:[], 81 | ACSSToRegexp:[], 82 | JSApiPropReplace:{} 83 | }; 84 | let state = ""; 85 | let jsaprstate=""; 86 | // let jsaprprop=""; 87 | rl 88 | .on('line', function (line, lineCount, byteCount) { 89 | line=line.replace(/#.*$/g, "").trim(); 90 | if (state === "") { 91 | if ("JSmethod" === line) { 92 | state = line 93 | } else if ("JS" === line) { 94 | state = line 95 | } else if ("AXML" === line) { 96 | state = line 97 | } else if ("ACSS" === line) { 98 | state = line 99 | } else if ("DIR" === line) { 100 | state = line 101 | } else if ("JSON" === line) { 102 | state = line 103 | } else if ("JS_API_PROP_REPLACE" === line) { 104 | state = line 105 | } else if("OVER"===line){ 106 | main(); 107 | } 108 | } else if ("end" === line) { 109 | state = ""; 110 | } else if ("" === line) { 111 | } else if ("JSmethod" === state) { 112 | let aTob = line.split("--->"); 113 | addUpdateMethods(aTob[0], aTob[1]); 114 | } else if ("JS" === state) { 115 | let aTob = line.split("--->"); 116 | addJSRegexp(aTob[0], aTob[1]); 117 | } else if ("AXML" === state) { 118 | let aTob = line.split("--->"); 119 | addAXMLRegexp(aTob[0], aTob[1]); 120 | } else if ("ACSS" === state) { 121 | let aTob = line.split("--->"); 122 | addACSSRegexp(aTob[0], aTob[1]); 123 | } else if ("JSON" === state) { 124 | let aTob = line.split("--->"); 125 | addJSONRegexp(aTob[0], aTob[1]); 126 | } else if ("JS_API_PROP_REPLACE" === state) { 127 | addToJSApiPropReplace(line) 128 | } else if ("DIR" === state) { 129 | config.dir = dirPath||line; 130 | console.log("切换到修改文件路径:" + config.dir); 131 | } else if("OVER"===line){ 132 | main(); 133 | } 134 | }) 135 | .on('error', function (e) { 136 | console.log(e); 137 | }); 138 | function main(){ 139 | // console.log(config.JSApiPropReplace) 140 | addUpdateSuffix("wxml", "axml");// 这边的order是UPDATESUFFIX 所以是修改后缀名 wxml->axml 141 | addUpdateSuffix("wxss", "acss");// wxss->acss 142 | setOrder(UPDATESUFFIX); 143 | HandleFile(config.dir); 144 | clearSuffix(); 145 | setOrder(WX2ANT); 146 | HandleFile(config.dir); 147 | console.log("*****************************************************************************") 148 | console.log("转换完成"); 149 | console.log("*****************************************************************************") 150 | } 151 | function setOrder(order) { 152 | Order = order; 153 | } 154 | function addUpdateMethods(method, toMethod) { 155 | config.methods.push(method); 156 | config.toMethods.push(toMethod || ""); 157 | } 158 | 159 | function clearMethod() { 160 | config.methods = []; 161 | config.toMethods = []; 162 | } 163 | 164 | // ----------------------------------- 要更新的后缀 165 | 166 | function addUpdateSuffix(suffix, toSuffix) { 167 | config.suffix.push(suffix); 168 | config.toSuffix.push(toSuffix || ""); 169 | } 170 | 171 | function clearSuffix() { 172 | config.suffix = []; 173 | config.toSuffix = []; 174 | } 175 | 176 | // ----------------------------------- js要更新的正则表达式 177 | 178 | function addJSRegexp(suffix, toSuffix) { 179 | config.JSRegexp.push(suffix); 180 | config.JSToRegexp.push(toSuffix || ""); 181 | } 182 | 183 | function clearJSRegexp() { 184 | config.JSRegexp = []; 185 | config.JSToRegexp = []; 186 | } 187 | 188 | // ----------------------------------- amxl要更新的正则表达式 189 | function addAXMLRegexp(suffix, toSuffix) { 190 | config.AXMLRegexp.push(suffix); 191 | config.AXMLToRegexp.push(toSuffix); 192 | } 193 | 194 | function clearAXMLRegexp() { 195 | config.AXMLRegexp = []; 196 | config.AXMLToRegexp = []; 197 | } 198 | 199 | // ----------------------------------- acss要更新的正则表达式 200 | function addACSSRegexp(suffix, toSuffix) { 201 | config.ACSSRegexp.push(suffix); 202 | config.ACSSToRegexp.push(toSuffix); 203 | } 204 | 205 | function clearACSSRegexp() { 206 | config.ACSSRegexp = []; 207 | config.ACSSToRegexp = []; 208 | } 209 | 210 | //----------------------------------- json要更新的正则表达式 211 | function addJSONRegexp(suffix, toSuffix) { 212 | config.JSONRegexp.push(suffix); 213 | config.JSONToRegexp.push(toSuffix); 214 | } 215 | 216 | function clearJSONRegexp() { 217 | config.JSONRegexp = []; 218 | config.JSONToRegexp = []; 219 | } 220 | //----------------------------------- JSApiPropReplace 221 | function addToJSApiPropReplace(str) { 222 | if(str==="PRO:"){ 223 | jsaprstate=""; 224 | }else if(str==="KEYS:"){ 225 | 226 | }else if(str.startsWith("KEYS:")&&jsaprstate!==""){ 227 | str=str.substring(5).trim() 228 | let aTob = str.split("--->"); 229 | config.JSApiPropReplace[jsaprstate][aTob[0]]=aTob[1] 230 | }else if(str.startsWith("PRO:")){ 231 | str=str.substring(4).trim() 232 | jsaprstate=str; 233 | config.JSApiPropReplace[jsaprstate]={}; 234 | }else if(jsaprstate===""){ 235 | jsaprstate=str; 236 | config.JSApiPropReplace[jsaprstate]={}; 237 | }else if(jsaprstate!==""){ 238 | let aTob = str.split("--->"); 239 | config.JSApiPropReplace[jsaprstate][aTob[0]]=aTob[1] 240 | } 241 | } 242 | 243 | // function clearJSONRegexp() { 244 | // config.JSONRegexp = []; 245 | // config.JSONToRegexp = []; 246 | // } 247 | // ----------------------------------- 248 | function HandleFile(file) { 249 | 250 | try { 251 | fs.accessSync(file) 252 | let stat = fs.statSync(file); 253 | if (stat.isFile()) { 254 | switch (Order) { 255 | case UPDATAANDCOPY: 256 | updataAndCopy(file); 257 | break; 258 | case DELETEFILE: 259 | deleteFile(file); 260 | break; 261 | case UPDATESUFFIX: 262 | updataSuffix(file); 263 | break; 264 | case WX2ANT: 265 | wx2ant(file); 266 | break; 267 | default: 268 | console.log("没有该种处理文件的方式"); 269 | break; 270 | } 271 | } else if (stat.isDirectory()) { 272 | let dirs = fs.readdirSync(file); 273 | for (let i in dirs) { 274 | HandleFile(path.resolve(file, dirs[i])); 275 | } 276 | } 277 | } catch (e) { 278 | console.log(e) 279 | } 280 | } 281 | 282 | 283 | /** 284 | * 将符合后缀的文件copy和修改后缀名为指定的后缀。e.g. 285 | * addUpdateSuffix(".wxml",".axml");将会copy指定目录下所有的.wxml后缀的文件为.axml后缀的文件 286 | * 287 | * @param f 288 | */ 289 | function updataAndCopy(file) { 290 | let index = isValid(file); 291 | if (index == -1) { 292 | return; 293 | } 294 | let suffix = config.suffix; 295 | let toSuffix = config.toSuffix; 296 | let newfile = file.replace(new RegExp(suffix[index] + "$"), toSuffix[index]); 297 | try { 298 | fs.copyFileSync(file, newfile); 299 | console.log("文件复制:" + newfile); 300 | } catch (e) { 301 | console.log(e) 302 | console.log("文件复制出错:" + e.getMessage()); 303 | } 304 | } 305 | 306 | /** 307 | * 将符合后缀的文件替换为指定的后缀 e.g. 308 | * addUpdateSuffix(".wxml",".axml");将会修改指定目录下所有的.wxml为.axml 309 | * 310 | * @param f 311 | */ 312 | function updataSuffix(file) { 313 | let index = isValid(file); 314 | if (index == -1) { 315 | return; 316 | } 317 | let suffix = config.suffix; 318 | let toSuffix = config.toSuffix; 319 | let newfile = file.replace(new RegExp(suffix[index] + "$"), toSuffix[index]); 320 | try { 321 | fs.renameSync(file, newfile); 322 | console.log("文件修改后缀名:" + newfile); 323 | } catch (e) { 324 | console.log(e) 325 | console.log("文件修改后缀名出错:" + newfile + "--" + e.getMessage()); 326 | } 327 | } 328 | 329 | /** 330 | * 删除指定后缀的文件 e.g. addUpdateSuffix("abc.xml")将会删除指定目录下所有的abc.xml 331 | * 332 | * @param f 333 | */ 334 | function deleteFile(file) { 335 | try { 336 | fs.accessSync(file); 337 | fs.unlinkSync(file); 338 | console.log("文件删除成功:" + path); 339 | } catch (e) { 340 | console.log(e); 341 | console.log(file + "文件有误"); 342 | } 343 | } 344 | 345 | /** 346 | * 微信小程序转阿里小程序 js文件主要是进行库名的修改,即'wx.'-->'my.' 方法名替换使用addUpdateMethods()添加更换的方法 347 | * e.g. addUpdateMethods("request","httpRequest") 将request转换成httpRequest 348 | * axml文件主要进行 属性名称的修改,即'wx:'-->'a:' 349 | * 350 | * @param f 351 | */ 352 | function wx2ant(file) { 353 | if (path.extname(file) === ".js") { 354 | let preffix = "(^|\\W+)wx\\."; 355 | let toPreffix = "$1my."; 356 | let methods = config.methods; 357 | let toMethods = config.toMethods; 358 | let JSRegexp = config.JSRegexp; 359 | let JSToRegexp = config.JSToRegexp; 360 | try { 361 | let content = fs.readFileSync(file, "utf8"); 362 | for (let i in methods) {// 修改不一样的方法 363 | content = content.replace(new RegExp(preffix + methods[i], "g"), toPreffix + toMethods[i]); 364 | } 365 | for (let i in JSRegexp) {// 修改不一样的方法 366 | content = content.replace(new RegExp(JSRegexp[i], "g"), JSToRegexp[i]); 367 | } 368 | content = content.replace(new RegExp(preffix, "g"), toPreffix);// 统一修改未进行方法替换的前缀 369 | content=JSAPR.replace(content,config.JSApiPropReplace); 370 | fs.writeFileSync(file, content); 371 | console.log("转换js文件:" + file); 372 | } catch (e) { 373 | console.log(e) 374 | console.log("转换js文件出错:" + file); 375 | } 376 | } else if (path.extname(file) === ".axml") { 377 | let AXMLRegexp = config.AXMLRegexp; 378 | let AXMLToRegexp = config.AXMLToRegexp; 379 | try { 380 | let content = fs.readFileSync(file, "utf8"); 381 | for (let i in AXMLRegexp) {// 修改不一样的方法 382 | content = content.replace(new RegExp(AXMLRegexp[i], "g"), AXMLToRegexp[i]); 383 | } 384 | fs.writeFileSync(file, content); 385 | console.log("转换axml文件:" + file); 386 | } catch (e) { 387 | console.log(e) 388 | console.log("转换axml文件出错:" + file); 389 | } 390 | } else if (path.extname(file) === ".json") { 391 | let JSONRegexp = config.JSONRegexp; 392 | let JSONToRegexp = config.JSONToRegexp; 393 | try { 394 | let content = fs.readFileSync(file, "utf8"); 395 | for (let i in JSONRegexp) {// 修改不一样的方法 396 | content = content.replace(new RegExp(JSONRegexp[i], "g"), JSONToRegexp[i]); 397 | } 398 | fs.writeFileSync(file, content); 399 | console.log("转换json文件:" + file); 400 | } catch (e) { 401 | console.log(e) 402 | console.log("转换json文件出错:" + file); 403 | } 404 | }else if (path.extname(file) === ".acss") { 405 | let ACSSRegexp = config.ACSSRegexp; 406 | let ACSSToRegexp = config.ACSSToRegexp; 407 | try { 408 | let content = fs.readFileSync(file, "utf8"); 409 | for (let i in ACSSRegexp) {// 修改不一样的方法 410 | content = content.replace(new RegExp(ACSSRegexp[i], "g"), ACSSToRegexp[i]); 411 | } 412 | fs.writeFileSync(file, content); 413 | console.log("转换acss文件:" + file); 414 | } catch (e) { 415 | console.log(e) 416 | console.log("转换acss文件出错:" + file); 417 | } 418 | } 419 | } 420 | 421 | function isValid(file) { 422 | let suffix = config.suffix 423 | for (let i in suffix) { 424 | if (file.endsWith(suffix[i])) { 425 | return i; 426 | } 427 | } 428 | return -1; 429 | } -------------------------------------------------------------------------------- /node/lib/JSApiPropReplace.js: -------------------------------------------------------------------------------- 1 | let babel = require("babel-core"); 2 | let traverse = require("ast-traverse") 3 | let fs = require("fs"); 4 | let path = require("path"); 5 | let pluginpath=path.resolve(__dirname, "../node_modules/babel-plugin-transform-object-rest-spread") 6 | module.exports.replace=function(content,config){ 7 | let ast; 8 | let begin=0; 9 | let end=0; 10 | let contentArray=[]; 11 | try { 12 | ast = babel.transform(content, { 13 | plugins: [pluginpath] 14 | }); 15 | traverse(ast.ast, { 16 | pre: function (node, parent, prop, idx) { 17 | if (node.type === "CallExpression" && node.callee.type === "MemberExpression" && node.arguments[0]!=undefined&& node.arguments[0].type === "ObjectExpression") { 18 | if(node.callee.property.type === "Identifier" && config[node.callee.property.name]!=undefined){ 19 | let PROP_name=node.callee.property.name;//api的名称 20 | let PROP=config[PROP_name];//替换的参数对象 21 | node.arguments[0].properties.forEach(function(element) { 22 | if(PROP[element.key.name]!=undefined){ 23 | end=element.key.start; 24 | let head=content.substring(begin,end);//element.key.start 25 | begin=element.key.end; 26 | contentArray.push(head,PROP[element.key.name]); 27 | } 28 | }); 29 | } 30 | } 31 | } 32 | }); 33 | let head=content.substring(begin);//element.key.start 34 | contentArray.push(head); 35 | return contentArray.join(""); 36 | } catch (exception) { 37 | console.log("Parse Error: " + exception.stack); 38 | // console.log(content) 39 | return content; 40 | } 41 | } -------------------------------------------------------------------------------- /node/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wx2ali", 3 | "version": "1.1.6", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ansi-regex": { 8 | "version": "2.1.1", 9 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 10 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 11 | }, 12 | "ansi-styles": { 13 | "version": "2.2.1", 14 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 15 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 16 | }, 17 | "ast-traverse": { 18 | "version": "0.1.1", 19 | "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", 20 | "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=" 21 | }, 22 | "babel-code-frame": { 23 | "version": "6.26.0", 24 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 25 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 26 | "requires": { 27 | "chalk": "^1.1.3", 28 | "esutils": "^2.0.2", 29 | "js-tokens": "^3.0.2" 30 | } 31 | }, 32 | "babel-core": { 33 | "version": "6.26.0", 34 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", 35 | "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", 36 | "requires": { 37 | "babel-code-frame": "^6.26.0", 38 | "babel-generator": "^6.26.0", 39 | "babel-helpers": "^6.24.1", 40 | "babel-messages": "^6.23.0", 41 | "babel-register": "^6.26.0", 42 | "babel-runtime": "^6.26.0", 43 | "babel-template": "^6.26.0", 44 | "babel-traverse": "^6.26.0", 45 | "babel-types": "^6.26.0", 46 | "babylon": "^6.18.0", 47 | "convert-source-map": "^1.5.0", 48 | "debug": "^2.6.8", 49 | "json5": "^0.5.1", 50 | "lodash": "^4.17.4", 51 | "minimatch": "^3.0.4", 52 | "path-is-absolute": "^1.0.1", 53 | "private": "^0.1.7", 54 | "slash": "^1.0.0", 55 | "source-map": "^0.5.6" 56 | } 57 | }, 58 | "babel-generator": { 59 | "version": "6.26.0", 60 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", 61 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", 62 | "requires": { 63 | "babel-messages": "^6.23.0", 64 | "babel-runtime": "^6.26.0", 65 | "babel-types": "^6.26.0", 66 | "detect-indent": "^4.0.0", 67 | "jsesc": "^1.3.0", 68 | "lodash": "^4.17.4", 69 | "source-map": "^0.5.6", 70 | "trim-right": "^1.0.1" 71 | } 72 | }, 73 | "babel-helpers": { 74 | "version": "6.24.1", 75 | "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 76 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 77 | "requires": { 78 | "babel-runtime": "^6.22.0", 79 | "babel-template": "^6.24.1" 80 | } 81 | }, 82 | "babel-messages": { 83 | "version": "6.23.0", 84 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 85 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 86 | "requires": { 87 | "babel-runtime": "^6.22.0" 88 | } 89 | }, 90 | "babel-plugin-syntax-object-rest-spread": { 91 | "version": "6.13.0", 92 | "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", 93 | "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" 94 | }, 95 | "babel-plugin-transform-object-rest-spread": { 96 | "version": "6.26.0", 97 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", 98 | "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", 99 | "requires": { 100 | "babel-plugin-syntax-object-rest-spread": "^6.8.0", 101 | "babel-runtime": "^6.26.0" 102 | } 103 | }, 104 | "babel-register": { 105 | "version": "6.26.0", 106 | "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 107 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 108 | "requires": { 109 | "babel-core": "^6.26.0", 110 | "babel-runtime": "^6.26.0", 111 | "core-js": "^2.5.0", 112 | "home-or-tmp": "^2.0.0", 113 | "lodash": "^4.17.4", 114 | "mkdirp": "^0.5.1", 115 | "source-map-support": "^0.4.15" 116 | } 117 | }, 118 | "babel-runtime": { 119 | "version": "6.26.0", 120 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 121 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 122 | "requires": { 123 | "core-js": "^2.4.0", 124 | "regenerator-runtime": "^0.11.0" 125 | } 126 | }, 127 | "babel-template": { 128 | "version": "6.26.0", 129 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 130 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 131 | "requires": { 132 | "babel-runtime": "^6.26.0", 133 | "babel-traverse": "^6.26.0", 134 | "babel-types": "^6.26.0", 135 | "babylon": "^6.18.0", 136 | "lodash": "^4.17.4" 137 | } 138 | }, 139 | "babel-traverse": { 140 | "version": "6.26.0", 141 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 142 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 143 | "requires": { 144 | "babel-code-frame": "^6.26.0", 145 | "babel-messages": "^6.23.0", 146 | "babel-runtime": "^6.26.0", 147 | "babel-types": "^6.26.0", 148 | "babylon": "^6.18.0", 149 | "debug": "^2.6.8", 150 | "globals": "^9.18.0", 151 | "invariant": "^2.2.2", 152 | "lodash": "^4.17.4" 153 | } 154 | }, 155 | "babel-types": { 156 | "version": "6.26.0", 157 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 158 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 159 | "requires": { 160 | "babel-runtime": "^6.26.0", 161 | "esutils": "^2.0.2", 162 | "lodash": "^4.17.4", 163 | "to-fast-properties": "^1.0.3" 164 | } 165 | }, 166 | "babylon": { 167 | "version": "6.18.0", 168 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 169 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" 170 | }, 171 | "balanced-match": { 172 | "version": "1.0.0", 173 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 174 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 175 | }, 176 | "brace-expansion": { 177 | "version": "1.1.8", 178 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 179 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 180 | "requires": { 181 | "balanced-match": "^1.0.0", 182 | "concat-map": "0.0.1" 183 | } 184 | }, 185 | "chalk": { 186 | "version": "1.1.3", 187 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 188 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 189 | "requires": { 190 | "ansi-styles": "^2.2.1", 191 | "escape-string-regexp": "^1.0.2", 192 | "has-ansi": "^2.0.0", 193 | "strip-ansi": "^3.0.0", 194 | "supports-color": "^2.0.0" 195 | } 196 | }, 197 | "concat-map": { 198 | "version": "0.0.1", 199 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 200 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 201 | }, 202 | "convert-source-map": { 203 | "version": "1.5.1", 204 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", 205 | "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" 206 | }, 207 | "core-js": { 208 | "version": "2.5.3", 209 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 210 | "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" 211 | }, 212 | "debug": { 213 | "version": "2.6.9", 214 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 215 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 216 | "requires": { 217 | "ms": "2.0.0" 218 | } 219 | }, 220 | "detect-indent": { 221 | "version": "4.0.0", 222 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 223 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 224 | "requires": { 225 | "repeating": "^2.0.0" 226 | } 227 | }, 228 | "escape-string-regexp": { 229 | "version": "1.0.5", 230 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 231 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 232 | }, 233 | "esutils": { 234 | "version": "2.0.2", 235 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 236 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" 237 | }, 238 | "globals": { 239 | "version": "9.18.0", 240 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 241 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" 242 | }, 243 | "has-ansi": { 244 | "version": "2.0.0", 245 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 246 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 247 | "requires": { 248 | "ansi-regex": "^2.0.0" 249 | } 250 | }, 251 | "home-or-tmp": { 252 | "version": "2.0.0", 253 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 254 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 255 | "requires": { 256 | "os-homedir": "^1.0.0", 257 | "os-tmpdir": "^1.0.1" 258 | } 259 | }, 260 | "invariant": { 261 | "version": "2.2.2", 262 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 263 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 264 | "requires": { 265 | "loose-envify": "^1.0.0" 266 | } 267 | }, 268 | "is-finite": { 269 | "version": "1.0.2", 270 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 271 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 272 | "requires": { 273 | "number-is-nan": "^1.0.0" 274 | } 275 | }, 276 | "js-tokens": { 277 | "version": "3.0.2", 278 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 279 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" 280 | }, 281 | "jsesc": { 282 | "version": "1.3.0", 283 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 284 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" 285 | }, 286 | "json5": { 287 | "version": "0.5.1", 288 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 289 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" 290 | }, 291 | "linebyline": { 292 | "version": "1.3.0", 293 | "resolved": "https://registry.npmjs.org/linebyline/-/linebyline-1.3.0.tgz", 294 | "integrity": "sha1-bvVM6rgy0j94Qe0vKW/psvba3pQ=" 295 | }, 296 | "lodash": { 297 | "version": "4.17.4", 298 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 299 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 300 | }, 301 | "loose-envify": { 302 | "version": "1.3.1", 303 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 304 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 305 | "requires": { 306 | "js-tokens": "^3.0.0" 307 | } 308 | }, 309 | "minimatch": { 310 | "version": "3.0.4", 311 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 312 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 313 | "requires": { 314 | "brace-expansion": "^1.1.7" 315 | } 316 | }, 317 | "minimist": { 318 | "version": "0.0.8", 319 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 320 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 321 | }, 322 | "mkdirp": { 323 | "version": "0.5.1", 324 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 325 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 326 | "requires": { 327 | "minimist": "0.0.8" 328 | } 329 | }, 330 | "ms": { 331 | "version": "2.0.0", 332 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 333 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 334 | }, 335 | "number-is-nan": { 336 | "version": "1.0.1", 337 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 338 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 339 | }, 340 | "os-homedir": { 341 | "version": "1.0.2", 342 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 343 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 344 | }, 345 | "os-tmpdir": { 346 | "version": "1.0.2", 347 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 348 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 349 | }, 350 | "path-is-absolute": { 351 | "version": "1.0.1", 352 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 353 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 354 | }, 355 | "private": { 356 | "version": "0.1.8", 357 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 358 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" 359 | }, 360 | "regenerator-runtime": { 361 | "version": "0.11.1", 362 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 363 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 364 | }, 365 | "repeating": { 366 | "version": "2.0.1", 367 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 368 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 369 | "requires": { 370 | "is-finite": "^1.0.0" 371 | } 372 | }, 373 | "slash": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 376 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" 377 | }, 378 | "source-map": { 379 | "version": "0.5.7", 380 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 381 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 382 | }, 383 | "source-map-support": { 384 | "version": "0.4.18", 385 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 386 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 387 | "requires": { 388 | "source-map": "^0.5.6" 389 | } 390 | }, 391 | "strip-ansi": { 392 | "version": "3.0.1", 393 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 394 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 395 | "requires": { 396 | "ansi-regex": "^2.0.0" 397 | } 398 | }, 399 | "supports-color": { 400 | "version": "2.0.0", 401 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 402 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 403 | }, 404 | "to-fast-properties": { 405 | "version": "1.0.3", 406 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 407 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" 408 | }, 409 | "trim-right": { 410 | "version": "1.0.1", 411 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 412 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" 413 | } 414 | } 415 | } 416 | -------------------------------------------------------------------------------- /node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wx2ali", 3 | "version": "1.1.7", 4 | "scripts": { 5 | "start": "node ./index.js" 6 | }, 7 | "dependencies": { 8 | "linebyline": "^1.3.0", 9 | "babel-core": "^6.26.0", 10 | "ast-traverse": "^0.1.1", 11 | "babel-plugin-transform-object-rest-spread": "^6.26.0" 12 | }, 13 | "bin": { 14 | "wx2ali": "index.js" 15 | }, 16 | "description": "微信小程序转支付宝小程序工具", 17 | "keywords": [ 18 | "wxmp", 19 | "wxapp", 20 | "amp", 21 | "antmp" 22 | ], 23 | "homepage": "https://github.com/foxitdog/wx2ali", 24 | "bugs": { 25 | "url": "https://github.com/foxitdog/wx2ali/issues" 26 | }, 27 | "main": "index.js", 28 | "devDependencies": { 29 | "ast-traverse": "^0.1.1", 30 | "babel-plugin-transform-object-rest-spread": "^6.26.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /node/test/test.js: -------------------------------------------------------------------------------- 1 | var htmlparser = require("htmlparser"); 2 | // var htmlparser = require("htmlparser2"); 3 | var jsonxml = require('jsontoxml'); 4 | var repl = require("repl"); 5 | var fs = require("fs"); 6 | var ast; 7 | var statements = { 8 | showToast: { 9 | title: "content", 10 | icon: "type" 11 | } 12 | } 13 | let begin=0; 14 | let end=0; 15 | let contentArray=[]; 16 | try { 17 | let content = fs.readFileSync("Z:\\Program\\workspaces\\wx\\LogisticsCabinetwc\\trunk\\LogisticsCabinetwc\\page\\main\\main.axml", "utf8"); 18 | var handler = new htmlparser.DefaultHandler(function (error, dom) { 19 | if (error) 20 | console.log(error); 21 | // else 22 | // console.log(dom) 23 | }); 24 | var parser = new htmlparser.Parser(handler); 25 | parser.parseComplete(content); 26 | // sys.puts(sys.inspect(handler.dom, false, null)); 27 | console.log(jsonxml(handler.dom)) 28 | console.log(handler.dom) 29 | } catch (exception) { 30 | console.log("Parse Error: " + exception); 31 | } 32 | repl.start("> ").context.dom = handler.dom; -------------------------------------------------------------------------------- /node/wx2ali.txt: -------------------------------------------------------------------------------- 1 | ============================== 2 | *以utf-8编码编写 有新的匹配规则可以告诉我 我来进行添加 3 | *注意:以DIR,JSmethod,JS,AXML为开始,以end结尾,#为注释。如果不会请按模版修改 4 | ============================== 5 | ----------------- 6 | 转换文件的目录 ***记得需要进行修改*** 7 | ----------------- 8 | DIR 9 | Z:\Program\workspaces\wx\LogisticsCabinetwc\trunk\LogisticsCabinetwc 10 | end 11 | ----------------- 12 | js函数名的替换 13 | ----------------- 14 | JSmethod 15 | request--->httpRequest 16 | login--->getAuthCode 17 | showModal--->confirm 18 | getUserInfo--->getAuthUserInfo 19 | requestPayment--->tradePay 20 | saveImageToPhotosAlbum--->saveImage 21 | setNavigationBarTitle--->setNavigationBar #导航栏标题 22 | setNavigationBarColor--->setNavigationBar #导航栏颜色 23 | getClipboardData--->getClipboard #粘贴板 24 | setClipboardData--->setClipboard #粘贴板 25 | canvasToTempFilePath--->toTempFilePath #1.1.3 当前画布的内容导出生成图片 26 | scanCode--->scan 27 | closeBLEConnection--->disconnectBLEDevice 28 | end 29 | ----------------- 30 | js中的函数参数的替换 31 | ----------------- 32 | JS 33 | (var|let|const)\s+(\w+)\s*=\s*require\(\s*(\S*)\s*\)--->import $2 from $3 #将require类型的导入替换成import类型的导入 处理https://github.com/foxitdog/wx2ali/issues/2问题 34 | module.exports *= *(\S*)--->export default $1 #将module.exports类型的导出替换成export default 类型的导出 处理https://github.com/foxitdog/wx2ali/issues/2问题 35 | getStorageSync\(\s*(\S+?)\s*\)--->getStorageSync({key:$1}) 36 | setStorageSync\(\s*(\S+?)\s*\,\s*(\S+)\s*\)--->setStorageSync({key:$1,data:$2}) 37 | removeStorageSync\(\s*(\S+?)\s*\)--->removeStorageSync({key:$1}) 38 | vibrateLong\(\s*?\{[\w\W]*?\}\s*?\)--->vibrate() 39 | vibrateShort\(\s*?\{[\w\W]*?\}\s*?\)--->vibrate() 40 | (\S+)\s*:\s*function--->$1 #es6的对象方法样式 41 | end 42 | ----------------- 43 | axml中的内容替换 44 | ----------------- 45 | AXML 46 | (^||\s+)wx:--->$1a: 47 | (^||\s+)bindtap(\W+)--->$1onTap$2 48 | (^||\s+)bindlongTap(\W+)--->$1onLongTap$2 49 | (^||\s+)bindinput(\W+)--->$1onInput$2 50 | (^||\s+)bindchange(\W+)--->$1onChange$2 51 | (^||\s+)bindinput(\W+)--->$1onInput$2 52 | (^||\s+)bindfocus(\W+)--->$1onFocus$2 53 | (^||\s+)bindblur(\W+)--->$1onBlur$2 54 | (^||\s+)bindconfirm(\W+)--->$1onConfirm$2 55 | (^||\s+)bindsubmit(\W+)--->$1onSubmit$2 56 | (^||\s+)bindreset(\W+)--->$1onReset$2 57 | (^||\s+)bindtouchstart(\W+)--->$1onTouchStart$2 58 | (^||\s+)bindtouchmove(\W+)--->$1onTouchMove$2 59 | (^||\s+)bindtouchend(\W+)--->$1onTouchEnd$2 60 | (^||\s+)bindtouchcancel(\W+)--->$1onTouchCancel$2 61 | (^||\s+)bindlongtap(\W+)--->$1onLongTap$2 62 | (^||\s+)bindmarkertap(\W+)--->$1onMarkerTap$2 63 | (^||\s+)bindcallouttap(\W+)--->$1onCalloutTap$2 64 | (^||\s+)bindcontroltap(\W+)--->$1onControlTap$2 65 | (^||\s+)bindregionchange(\W+)--->$1onRegionChange$2 66 | (^||\s+)canvas-id(\W+)--->$1id$2 67 | (^||\s+)bind(\w+)(\W+)--->$1on$2$3 68 | end 69 | ----------------- 70 | ACSS中的内容替换 71 | ----------------- 72 | ACSS 73 | (@import\s*['"]\S*?)\.wxss(['"])--->$1.acss$2 74 | end 75 | ----------------- 76 | json中的内容替换 77 | ----------------- 78 | JSON 79 | (^||\s+\W)navigationBarTextStyle(\W)--->$1titleBarColor$2 80 | (^||\s+\W)navigationBarTitleText(\W)--->$1defaultTitle$2 81 | (^||\s+\W)enablePullDownRefresh(\W)--->$1pullRefresh$2 82 | (^||\s+\W)disableScroll(\W)--->$1allowsBounceVertical$2 83 | (^||\s+\W)color(\W)--->$1textColor$2 84 | (^||\s+\W)list(\W)--->$1items$2 85 | (^||\s+\W)text(\W)--->$1name$2 86 | (^||\s+\W)iconPath(\W)--->$1icon$2 87 | (^||\s+\W)iconPath(\W)--->$1icon$2 88 | (^||\s+\W)selectedIconPath(\W)--->$1activeIcon$2 89 | end 90 | ----------------- 91 | js中的api参数对象的的属性名称替换 92 | ----------------- 93 | JS_API_PROP_REPLACE 94 | PRO: #api名称 95 | showToast #showToast中的title 96 | KEYS: #替换的属性名对 97 | title--->content 98 | icon--->type 99 | #========================================== 100 | PRO: 101 | showLoading #显示加载框 102 | KEYS: 103 | title--->content 104 | #========================================== 105 | PRO: 106 | confirm #显示提示框 107 | KEYS: 108 | confirmText--->confirmButtonText 109 | cancelText--->cancelButtonText 110 | #========================================== 111 | PRO: 112 | showActionSheet 113 | KEYS: 114 | itemList--->items 115 | #========================================== 116 | PRO: 117 | setTextAlign 118 | KEYS: 119 | align--->textAlign 120 | #========================================== 121 | PRO: 122 | previewImage 123 | KEYS: 124 | current--->current=string->number 125 | #========================================== 126 | PRO: 127 | getLocation #获取位置 128 | KEYS: 129 | type--->type=string->number 130 | #========================================== 131 | PRO: 132 | saveImage 133 | KEYS: 134 | filePath--->url 135 | #========================================== 136 | PRO: 137 | httpRequest 138 | KEYS: 139 | header--->headers 140 | #========================================== 141 | PRO: 142 | uploadFile 143 | KEYS: 144 | name--->fileName 145 | #========================================== 146 | PRO: 147 | connectSocket 148 | KEYS: 149 | header--->headers 150 | #========================================== 151 | PRO: 152 | setClipboard 153 | KEYS: 154 | data--->text 155 | #========================================== 156 | PRO: 157 | makePhoneCall 158 | KEYS: 159 | phoneNumber--->number 160 | end 161 | 162 | OVER -------------------------------------------------------------------------------- /runfile/translation.bat: -------------------------------------------------------------------------------- 1 | java -jar wx2ali.jar 2 | pause; -------------------------------------------------------------------------------- /runfile/wx2ali.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxitdog/wx2ali/eec468862a8563ed3d1edf79e22aa9ee610321b9/runfile/wx2ali.jar -------------------------------------------------------------------------------- /runfile/wx2ali.txt: -------------------------------------------------------------------------------- 1 | ============================== 2 | *以utf-8编码编写 有新的匹配规则可以告诉我 我来进行添加 3 | *注意:以DIR,JSmethod,JS,AXML为开始,以end结尾,#为注释。如果不会请按模版修改 4 | ============================== 5 | ----------------- 6 | 文件目录 7 | ----------------- 8 | DIR 9 | Z:\Program\workspaces\wx\LogisticsCabinetwc\trunk\LogisticsCabinetwc 10 | end 11 | ----------------- 12 | js方法的替换 13 | ----------------- 14 | JSmethod 15 | request--->httpRequest 16 | login--->getAuthCode 17 | showModal--->confirm 18 | end 19 | ----------------- 20 | js中的内容替换 21 | ----------------- 22 | JS 23 | getStorageSync\(\s*(\S+)\s*\)--->getStorageSync({key:$1}) 24 | setStorageSync\(\s*(\S+)\s*\,\s*(\S+)\s*\)--->setStorageSync({key:$1,data:$2}) 25 | removeStorageSync\(\s*(\S+)\s*\)--->removeStorageSync({key:$1}) 26 | (\S+)\s*:\s*function--->$1 27 | end 28 | ----------------- 29 | axml中的内容替换 30 | ----------------- 31 | AXML 32 | (^||\s+)wx:--->$1a: 33 | (^||\s+)bindtap(\W+)--->$1onTap$2 34 | (^||\s+)bindlongTap(\W+)--->$1onLongTap$2 35 | (^||\s+)bindinput(\W+)--->$1onInput$2 36 | (^||\s+)bind(\w+)(\W+)--->$1on$2$3 37 | end 38 | ----------------- 39 | json中的内容替换 40 | ----------------- 41 | JSON 42 | (^||\s+\W)navigationBarTextStyle(\W)--->$1titleBarColor$2 43 | (^||\s+\W)navigationBarTitleText(\W)--->$1defaultTitle$2 44 | (^||\s+\W)enablePullDownRefresh(\W)--->$1pullRefresh$2 45 | (^||\s+\W)disableScroll(\W)--->$1allowsBounceVertical$2 46 | (^||\s+\W)color(\W)--->$1textColor$2 47 | (^||\s+\W)list(\W)--->$1items$2 48 | (^||\s+\W)text(\W)--->$1name$2 49 | (^||\s+\W)iconPath(\W)--->$1icon$2 50 | (^||\s+\W)iconPath(\W)--->$1icon$2 51 | (^||\s+\W)selectedIconPath(\W)--->$1activeIcon$2 52 | end 53 | 54 | OVER -------------------------------------------------------------------------------- /src/com/text/parser/Wx2Ant.java: -------------------------------------------------------------------------------- 1 | package com.text.parser; 2 | 3 | import java.io.File; 4 | import java.io.FileNotFoundException; 5 | import java.io.IOException; 6 | import java.util.ArrayList; 7 | 8 | import org.apache.commons.io.FileUtils; 9 | import org.apache.commons.io.LineIterator; 10 | 11 | /** 12 | * 梁云-895423140@qq.com 文件操作都是以File类来进行操作, 所谓的后缀也都是文件的绝对路径的末尾文字; 如后缀: 13 | * xml;.xml;abc.xml;js;.js;abc.js; 14 | * 15 | * @author sudy-liangyun 16 | * 17 | */ 18 | public class Wx2Ant { 19 | private ArrayList suffix = new ArrayList<>(); 20 | private ArrayList toSuffix = new ArrayList<>(); 21 | private ArrayList methods = new ArrayList<>(); 22 | private ArrayList toMethods = new ArrayList<>(); 23 | private ArrayList JSRegexp = new ArrayList<>(); 24 | private ArrayList JSToRegexp = new ArrayList<>(); 25 | private ArrayList AXMLRegexp = new ArrayList<>(); 26 | private ArrayList AXMLToRegexp = new ArrayList<>(); 27 | private ArrayList JSONRegexp = new ArrayList<>(); 28 | private ArrayList JSONToRegexp = new ArrayList<>(); 29 | private String dir = ""; 30 | /** 31 | * 将符合后缀的文件copy和修改后缀名为指定的后缀。e.g. 32 | * addUpdateSuffix(".wxml",".axml");将会copy指定目录下所有的.wxml后缀的文件为.axml后缀的文件 33 | */ 34 | public static final int UPDATAANDCOPY = 1; 35 | /** 36 | * 删除指定后缀的文件 e.g. addUpdateSuffix("abc.xml")将会删除指定目录下所有的abc.xml 37 | */ 38 | public static final int DELETEFILE = 2; 39 | /** 40 | * 将符合后缀的文件替换为指定的后缀 e.g. 41 | * addUpdateSuffix(".wxml",".axml");将会修改指定目录下所有的.wxml为.axml 42 | */ 43 | public static final int UPDATESUFFIX = 3; 44 | /** 45 | * 微信小程序转阿里小程序 js文件主要是进行库名的修改,即'wx.'-->'my.' 46 | * 方法名替换使用addUpdateMethods()添加更换的方法 e.g. 47 | * addUpdateMethods("request","httpRequest") 将request转换成httpRequest 48 | * axml文件主要进行 属性名称的修改,即'wx:'-->'a:' 49 | */ 50 | public static final int WX2ANT = 4; 51 | 52 | private int order = WX2ANT; 53 | 54 | public static void main(String[] args) { 55 | 56 | Wx2Ant us = new Wx2Ant(); 57 | System.out.println("工作目录:" + System.getProperty("user.dir")); 58 | String configPath = System.getProperty("user.dir") + File.separator + "wx2ali.txt"; 59 | // String configPath = "z:/wx2ali.txt"; 60 | us.readConfig(configPath); 61 | us.addUpdateSuffix("wxml", "axml");// 这边的order是UPDATESUFFIX 所以是修改后缀名 62 | // wxml->axml 63 | us.addUpdateSuffix("wxss", "acss");// wxss->acss 64 | us.setOrder(UPDATESUFFIX); 65 | us.HandleFile(us.dir); 66 | us.clearSuffix(); 67 | us.addUpdateSuffix(".axml"); 68 | us.addUpdateSuffix(".acss"); 69 | us.addUpdateSuffix(".json"); 70 | // 动作 71 | us.setOrder(WX2ANT); 72 | us.HandleFile(us.dir); 73 | } 74 | 75 | // ----------------------------------- 76 | public int getOrder() { 77 | return order; 78 | } 79 | 80 | public void setOrder(int order) { 81 | this.order = order; 82 | } 83 | 84 | // ----------------------------------- 85 | public void addUpdateMethods(String method) { 86 | addUpdateSuffix(method, ""); 87 | } 88 | 89 | public void addUpdateMethods(String method, String toMethod) { 90 | this.methods.add(method); 91 | this.toMethods.add(toMethod); 92 | } 93 | 94 | public void clearMethod() { 95 | this.methods.clear(); 96 | this.toMethods.clear(); 97 | } 98 | 99 | // ----------------------------------- 要更新的后缀 100 | public void addUpdateSuffix(String s) { 101 | addUpdateSuffix(s, ""); 102 | } 103 | 104 | public void addUpdateSuffix(String suffix, String toSuffix) { 105 | this.suffix.add(suffix); 106 | this.toSuffix.add(toSuffix); 107 | } 108 | 109 | public void clearSuffix() { 110 | this.suffix.clear(); 111 | this.toSuffix.clear(); 112 | } 113 | 114 | // ----------------------------------- js要更新的正则表达式 115 | public void addJSRegexp(String s) { 116 | addJSRegexp(s, ""); 117 | } 118 | 119 | public void addJSRegexp(String suffix, String toSuffix) { 120 | this.JSRegexp.add(suffix); 121 | this.JSToRegexp.add(toSuffix); 122 | } 123 | 124 | public void clearJSRegexp() { 125 | this.JSRegexp.clear(); 126 | this.JSToRegexp.clear(); 127 | } 128 | 129 | // ----------------------------------- amxl要更新的正则表达式 130 | public void addAXMLRegexp(String s) { 131 | addAXMLRegexp(s, ""); 132 | } 133 | 134 | public void addAXMLRegexp(String suffix, String toSuffix) { 135 | this.AXMLRegexp.add(suffix); 136 | this.AXMLToRegexp.add(toSuffix); 137 | } 138 | 139 | public void clearAXMLRegexp() { 140 | this.AXMLRegexp.clear(); 141 | this.AXMLToRegexp.clear(); 142 | } 143 | 144 | // ----------------------------------- json要更新的正则表达式 145 | public void addJSONRegexp(String s) { 146 | addAXMLRegexp(s, ""); 147 | } 148 | 149 | public void addJSONRegexp(String suffix, String toSuffix) { 150 | this.JSONRegexp.add(suffix); 151 | this.JSONToRegexp.add(toSuffix); 152 | } 153 | 154 | public void clearJSONRegexp() { 155 | this.JSONRegexp.clear(); 156 | this.JSONToRegexp.clear(); 157 | } 158 | // ----------------------------------- 159 | 160 | private void HandleFile(Object src) { 161 | File f = null; 162 | if (src instanceof String) { 163 | f = new File((String) src); 164 | } else if (src instanceof File) { 165 | f = (File) src; 166 | } else { 167 | return; 168 | } 169 | if (f.exists()) { 170 | if (f.isDirectory()) { 171 | File[] af = f.listFiles(); 172 | for (int i = 0; i < af.length; i++) { 173 | HandleFile(af[i]); 174 | } 175 | } else if (f.isFile() && (isValid(f) != -1)) { 176 | switch (order) { 177 | case UPDATAANDCOPY: 178 | updataAndCopy(f); 179 | break; 180 | case DELETEFILE: 181 | deleteFile(f); 182 | break; 183 | case UPDATESUFFIX: 184 | updataSuffix(f); 185 | break; 186 | case WX2ANT: 187 | wx2ant(f); 188 | break; 189 | default: 190 | System.out.println("没有该种处理文件的方式"); 191 | break; 192 | } 193 | } 194 | } 195 | return; 196 | } 197 | 198 | private int isValid(File f) { 199 | for (int i = 0; i < suffix.size(); i++) { 200 | if (f.getAbsolutePath().endsWith(suffix.get(i))) { 201 | return i; 202 | } 203 | } 204 | return -1; 205 | } 206 | 207 | /** 208 | * 将符合后缀的文件copy和修改后缀名为指定的后缀。e.g. 209 | * addUpdateSuffix(".wxml",".axml");将会copy指定目录下所有的.wxml后缀的文件为.axml后缀的文件 210 | * 211 | * @param f 212 | */ 213 | private void updataAndCopy(File f) { 214 | int index = isValid(f); 215 | String newfile = f.getAbsolutePath().replaceFirst(suffix.get(index) + "$", toSuffix.get(index)); 216 | try { 217 | FileUtils.copyFile(f, new File(newfile)); 218 | System.out.println("文件复制:" + newfile); 219 | } catch (FileNotFoundException e) { 220 | System.out.println("文件复制出错:" + e.getMessage()); 221 | } catch (IOException e) { 222 | System.out.println("文件复制出错:" + e.getMessage()); 223 | } 224 | } 225 | 226 | /** 227 | * 将符合后缀的文件替换为指定的后缀 e.g. 228 | * addUpdateSuffix(".wxml",".axml");将会修改指定目录下所有的.wxml为.axml 229 | * 230 | * @param f 231 | */ 232 | private void updataSuffix(File f) { 233 | int index = isValid(f); 234 | String newfile = f.getAbsolutePath().replaceFirst(suffix.get(index) + "$", toSuffix.get(index)); 235 | try { 236 | f.renameTo(new File(newfile)); 237 | System.out.println("文件修改后缀名:" + newfile); 238 | } catch (Exception e) { 239 | System.out.println("文件修改后缀名出错:" + newfile + "--" + e.getMessage()); 240 | } 241 | } 242 | 243 | /** 244 | * 删除指定后缀的文件 e.g. addUpdateSuffix("abc.xml")将会删除指定目录下所有的abc.xml 245 | * 246 | * @param f 247 | */ 248 | private void deleteFile(File f) { 249 | String path = f.getAbsolutePath(); 250 | try { 251 | f.delete(); 252 | } catch (Exception e) { 253 | System.out.println(path + "文件删除出错:" + e.getMessage()); 254 | } 255 | System.out.println("文件删除成功:" + path); 256 | } 257 | 258 | /** 259 | * 微信小程序转阿里小程序 js文件主要是进行库名的修改,即'wx.'-->'my.' 260 | * 方法名替换使用addUpdateMethods()添加更换的方法 e.g. 261 | * addUpdateMethods("request","httpRequest") 将request转换成httpRequest 262 | * axml文件主要进行 属性名称的修改,即'wx:'-->'a:' 263 | * 264 | * @param f 265 | */ 266 | private void wx2ant(File f) { 267 | if (f.getAbsolutePath().endsWith(".js")) { 268 | String preffix = "(^|\\W+)wx\\."; 269 | String toPreffix = "$1my."; 270 | try { 271 | String file = FileUtils.readFileToString(f, "utf-8"); 272 | for (int i = 0; i < methods.size(); i++) {// 修改不一样的方法 273 | file = file.replaceAll(preffix + methods.get(i), toPreffix + toMethods.get(i)); 274 | } 275 | for (int i = 0; i < JSRegexp.size(); i++) {// 修改不一样的方法 276 | file = file.replaceAll(JSRegexp.get(i), JSToRegexp.get(i)); 277 | } 278 | file = file.replaceAll(preffix, toPreffix);// 统一修改未进行方法替换的前缀 279 | FileUtils.writeStringToFile(f, file, "utf-8"); 280 | System.out.println("转换js文件:" + f.getAbsolutePath()); 281 | } catch (IOException e) { 282 | System.out.println("转换js文件出错:" + f.getAbsolutePath() + "--" + e.getMessage()); 283 | } 284 | } else if (f.getAbsolutePath().endsWith(".axml")) { 285 | try { 286 | String s = FileUtils.readFileToString(f, "utf-8"); 287 | for (int i = 0; i < AXMLRegexp.size(); i++) {// 修改不一样的方法 288 | s = s.replaceAll(AXMLRegexp.get(i), AXMLToRegexp.get(i)); 289 | } 290 | FileUtils.writeStringToFile(f, s, "utf-8"); 291 | System.out.println("转换axml文件:" + f.getAbsolutePath()); 292 | } catch (IOException e) { 293 | System.out.println("转换axml文件出错:" + f.getAbsolutePath() + "--" + e.getMessage()); 294 | } 295 | } else if (f.getAbsolutePath().endsWith(".json")) { 296 | try { 297 | String s = FileUtils.readFileToString(f, "utf-8"); 298 | for (int i = 0; i < JSONRegexp.size(); i++) {// 修改不一样的方法 299 | s = s.replaceAll(JSONRegexp.get(i), JSONToRegexp.get(i)); 300 | } 301 | FileUtils.writeStringToFile(f, s, "utf-8"); 302 | System.out.println("转换json文件:" + f.getAbsolutePath()); 303 | } catch (IOException e) { 304 | System.out.println("转换json文件出错:" + f.getAbsolutePath() + "--" + e.getMessage()); 305 | } 306 | } 307 | } 308 | 309 | public void readConfig(String configPath) { 310 | try { 311 | LineIterator li = FileUtils.lineIterator(new File(configPath), "utf-8"); 312 | int state = 0; 313 | while (li.hasNext()) { 314 | String l = li.nextLine(); 315 | l = l.replaceAll("#.*$", "").trim(); 316 | if (state == 0) { 317 | if ("JSmethod".equals(l)) { 318 | state = 1; 319 | } else if ("JS".equals(l)) { 320 | state = 2; 321 | } else if ("AXML".equals(l)) { 322 | state = 3; 323 | } else if ("JSON".equals(l)) { 324 | state = 4; 325 | } else if ("DIR".equals(l)) { 326 | state = 5; 327 | } 328 | } else if ("end".equals(l)) { 329 | state = 0; 330 | } else if (state == 1) { 331 | String[] aTob = l.split("--->"); 332 | this.addUpdateMethods(aTob[0], aTob[1]); 333 | } else if (state == 2) { 334 | String[] aTob = l.split("--->"); 335 | this.addJSRegexp(aTob[0], aTob[1]); 336 | } else if (state == 3) { 337 | String[] aTob = l.split("--->"); 338 | this.addAXMLRegexp(aTob[0], aTob[1]); 339 | } else if (state == 4) { 340 | String[] aTob = l.split("--->"); 341 | this.addJSONRegexp(aTob[0], aTob[1]); 342 | } else if (state == 5) { 343 | dir = l; 344 | System.out.println("切换到修改文件路径:" + l); 345 | } 346 | } 347 | } catch (IOException e) { 348 | e.printStackTrace(); 349 | } 350 | } 351 | } 352 | -------------------------------------------------------------------------------- /wx2ali.txt: -------------------------------------------------------------------------------- 1 | ============================== 2 | *以utf-8编码编写 有新的匹配规则可以告诉我 我来进行添加 3 | *注意:以DIR,JSmethod,JS,AXML为开始,以end结尾,#为注释。如果不会请按模版修改 4 | ============================== 5 | ----------------- 6 | 转换文件的目录 ***记得需要进行修改*** 7 | ----------------- 8 | DIR 9 | Z:\Program\workspaces\wx\LogisticsCabinetwc\trunk\LogisticsCabinetwc 10 | end 11 | ----------------- 12 | js函数名的替换 13 | ----------------- 14 | JSmethod 15 | request--->httpRequest 16 | login--->getAuthCode 17 | showModal--->confirm 18 | getUserInfo--->getAuthUserInfo 19 | requestPayment--->tradePay 20 | saveImageToPhotosAlbum--->saveImage 21 | setNavigationBarTitle--->setNavigationBar #导航栏标题 22 | setNavigationBarColor--->setNavigationBar #导航栏颜色 23 | getClipboardData--->getClipboard #粘贴板 24 | setClipboardData--->setClipboard #粘贴板 25 | canvasToTempFilePath--->toTempFilePath #1.1.3 当前画布的内容导出生成图片 26 | scanCode--->scan 27 | closeBLEConnection--->disconnectBLEDevice 28 | end 29 | ----------------- 30 | js中的函数参数的替换 31 | ----------------- 32 | JS 33 | getStorageSync\(\s*(\S+)\s*\)--->getStorageSync({key:$1}) 34 | setStorageSync\(\s*(\S+)\s*\,\s*(\S+)\s*\)--->setStorageSync({key:$1,data:$2}) 35 | removeStorageSync\(\s*(\S+)\s*\)--->removeStorageSync({key:$1}) 36 | vibrateLong\(\s*?\{[\w\W]*?\}\s*?\)--->vibrate() 37 | vibrateShort\(\s*?\{[\w\W]*?\}\s*?\)--->vibrate() 38 | (\S+)\s*:\s*function--->$1 #es6的对象方法样式 39 | end 40 | ----------------- 41 | axml中的内容替换 42 | ----------------- 43 | AXML 44 | (^||\s+)wx:--->$1a: 45 | (^||\s+)bindtap(\W+)--->$1onTap$2 46 | (^||\s+)bindlongTap(\W+)--->$1onLongTap$2 47 | (^||\s+)bindinput(\W+)--->$1onInput$2 48 | (^||\s+)bindchange(\W+)--->$1onChange$2 49 | (^||\s+)bindinput(\W+)--->$1onInput$2 50 | (^||\s+)bindfocus(\W+)--->$1onFocus$2 51 | (^||\s+)bindblur(\W+)--->$1onBlur$2 52 | (^||\s+)bindconfirm(\W+)--->$1onConfirm$2 53 | (^||\s+)bindsubmit(\W+)--->$1onSubmit$2 54 | (^||\s+)bindreset(\W+)--->$1onReset$2 55 | (^||\s+)bindtouchstart(\W+)--->$1onTouchStart$2 56 | (^||\s+)bindtouchmove(\W+)--->$1onTouchMove$2 57 | (^||\s+)bindtouchend(\W+)--->$1onTouchEnd$2 58 | (^||\s+)bindtouchcancel(\W+)--->$1onTouchCancel$2 59 | (^||\s+)bindlongtap(\W+)--->$1onLongTap$2 60 | (^||\s+)bindmarkertap(\W+)--->$1onMarkerTap$2 61 | (^||\s+)bindcallouttap(\W+)--->$1onCalloutTap$2 62 | (^||\s+)bindcontroltap(\W+)--->$1onControlTap$2 63 | (^||\s+)bindregionchange(\W+)--->$1onRegionChange$2 64 | (^||\s+)canvas-id(\W+)--->$1id$2 65 | (^||\s+)bind(\w+)(\W+)--->$1on$2$3 66 | end 67 | ----------------- 68 | json中的内容替换 69 | ----------------- 70 | JSON 71 | (^||\s+\W)navigationBarTextStyle(\W)--->$1titleBarColor$2 72 | (^||\s+\W)navigationBarTitleText(\W)--->$1defaultTitle$2 73 | (^||\s+\W)enablePullDownRefresh(\W)--->$1pullRefresh$2 74 | (^||\s+\W)disableScroll(\W)--->$1allowsBounceVertical$2 75 | (^||\s+\W)color(\W)--->$1textColor$2 76 | (^||\s+\W)list(\W)--->$1items$2 77 | (^||\s+\W)text(\W)--->$1name$2 78 | (^||\s+\W)iconPath(\W)--->$1icon$2 79 | (^||\s+\W)iconPath(\W)--->$1icon$2 80 | (^||\s+\W)selectedIconPath(\W)--->$1activeIcon$2 81 | end 82 | ----------------- 83 | js中的api参数对象的的属性名称替换 84 | ----------------- 85 | JS_API_PROP_REPLACE 86 | PRO: #api名称 87 | showToast #showToast中的title 88 | KEYS: #替换的属性名对 89 | title--->content 90 | icon--->type 91 | #========================================== 92 | PRO: 93 | showLoading #显示加载框 94 | KEYS: 95 | title--->content 96 | #========================================== 97 | PRO: 98 | confirm #显示提示框 99 | KEYS: 100 | confirmText--->confirmButtonText 101 | cancelText--->cancelButtonText 102 | #========================================== 103 | PRO: 104 | showActionSheet 105 | KEYS: 106 | itemList--->items 107 | #========================================== 108 | PRO: 109 | setTextAlign 110 | KEYS: 111 | align--->textAlign 112 | #========================================== 113 | PRO: 114 | previewImage 115 | KEYS: 116 | current--->current=string->number 117 | #========================================== 118 | PRO: 119 | getLocation #获取位置 120 | KEYS: 121 | type--->type=string->number 122 | #========================================== 123 | PRO: 124 | saveImage 125 | KEYS: 126 | filePath--->url 127 | #========================================== 128 | PRO: 129 | httpRequest 130 | KEYS: 131 | header--->headers 132 | #========================================== 133 | PRO: 134 | uploadFile 135 | KEYS: 136 | name--->fileName 137 | #========================================== 138 | PRO: 139 | connectSocket 140 | KEYS: 141 | header--->headers 142 | #========================================== 143 | PRO: 144 | setClipboard 145 | KEYS: 146 | data--->text 147 | #========================================== 148 | PRO: 149 | makePhoneCall 150 | KEYS: 151 | phoneNumber--->number 152 | end 153 | 154 | OVER --------------------------------------------------------------------------------