├── .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 |
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
--------------------------------------------------------------------------------