efront 4.0.0 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/coms/compile/common.js +16 -3
  2. package/coms/compile/downLevel.js +14 -9
  3. package/coms/compile/downLevel_test.js +46 -0
  4. package/coms/compile/unstruct.js +27 -22
  5. package/coms/compile/unstruct_test.js +4 -1
  6. package/package.json +1 -1
  7. package/public/efront.js +1 -1
  8. package/coms/typescript-helpers/__assign.js +0 -18
  9. package/coms/typescript-helpers/__asyncDelegator.js +0 -12
  10. package/coms/typescript-helpers/__asyncGenerator.js +0 -18
  11. package/coms/typescript-helpers/__asyncValues.js +0 -14
  12. package/coms/typescript-helpers/__await.js +0 -8
  13. package/coms/typescript-helpers/__awaiter.js +0 -16
  14. package/coms/typescript-helpers/__classPrivateFieldGet.js +0 -12
  15. package/coms/typescript-helpers/__classPrivateFieldIn.js +0 -11
  16. package/coms/typescript-helpers/__classPrivateFieldSet.js +0 -13
  17. package/coms/typescript-helpers/__createBinding.js +0 -18
  18. package/coms/typescript-helpers/__decorate.js +0 -13
  19. package/coms/typescript-helpers/__esDecorate.js +0 -34
  20. package/coms/typescript-helpers/__exportStar.js +0 -10
  21. package/coms/typescript-helpers/__extends.js +0 -22
  22. package/coms/typescript-helpers/__generator.js +0 -34
  23. package/coms/typescript-helpers/__importDefault.js +0 -10
  24. package/coms/typescript-helpers/__importStar.js +0 -14
  25. package/coms/typescript-helpers/__makeTemplateObject.js +0 -11
  26. package/coms/typescript-helpers/__metadata.js +0 -10
  27. package/coms/typescript-helpers/__param.js +0 -10
  28. package/coms/typescript-helpers/__propKey.js +0 -10
  29. package/coms/typescript-helpers/__read.js +0 -23
  30. package/coms/typescript-helpers/__rest.js +0 -18
  31. package/coms/typescript-helpers/__runInitializers.js +0 -14
  32. package/coms/typescript-helpers/__setFunctionName.js +0 -11
  33. package/coms/typescript-helpers/__setModuleDefault.js +0 -12
  34. package/coms/typescript-helpers/__spreadArray.js +0 -16
  35. package/coms/typescript-helpers/__values.js +0 -18
@@ -248,21 +248,30 @@ function snapSentenceHead(o) {
248
248
  }
249
249
  return o;
250
250
  }
251
-
251
+ var getStrapHead = function (o) {
252
+ var p = o.prev;
253
+ if (p && p.type === STRAP && !p.transive) return p;
254
+ if (p && p.type === STRAP && p.text === 'await') p = p.prev;
255
+ if (p && p.type === STRAP && p.text === 'for') return p;
256
+ return null;
257
+ }
252
258
  var snapExpressHead = function (o) {
253
259
  if (!o || o.type & ~(EXPRESS | SCOPED | QUOTED)) return o;
254
260
  var a = o;
255
261
  while (o && o.prev) {
256
262
  var p = o.prev;
257
263
  if (p && p.type === STRAP && p.text === 'new') return p;
264
+ if (o.type === SCOPED && o.entry === '(') {
265
+ var h = getStrapHead(o);
266
+ if (h) return h;
267
+ }
258
268
  if (o.type === SCOPED && o.entry !== '{'
259
269
  || o.type === EXPRESS && /^(\??\.[^\.]|\[)/.test(o.text)
260
270
  || /\.$/.test(p.text) && !p.isdigit
261
271
  || o.type === QUOTED && (o.length || /^\`/.test(o.text))
262
272
  ) {
263
273
  if (p.type === SCOPED && p.entry === '(') {
264
- var pp = p.prev;
265
- if (pp && pp.type === STRAP && !p.transive) return o;
274
+ if (getStrapHead(p)) return o;
266
275
  }
267
276
  if (p.type & (EXPRESS | VALUE | QUOTED | SCOPED)) {
268
277
  a = o;
@@ -526,6 +535,10 @@ var createScoped = function (parsed, wash) {
526
535
  break;
527
536
  case "for":
528
537
  o = o.next;
538
+ if (o.type === STRAP && o.text === 'await') {
539
+ funcbody.async = funcbody.await = true;
540
+ o = o.next;
541
+ }
529
542
  isScope = true;
530
543
  break;
531
544
 
@@ -765,9 +765,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
765
765
  case "class":
766
766
  i = killcls(body, i, letname_);
767
767
  break;
768
+ case "for":
768
769
  case "function":
769
770
  o = o.next;
770
- if (o && o.type === STAMP) {
771
+ if (o && o.type === STRAP) o = o.next;
772
+ else if (o && o.type === STAMP) {
771
773
  i++;
772
774
  var n = body.indexOf(o, i) + 1;
773
775
  o = o.next;
@@ -943,6 +945,7 @@ var unforof = function (o, getnewname, used) {
943
945
  var hasawait = false;
944
946
  if (o.type === STRAP && o.text === 'await') {
945
947
  hasawait = true;
948
+ splice2(o.queue, o, o.next);
946
949
  o = o.next;
947
950
  }
948
951
  var m = o.first;
@@ -964,7 +967,7 @@ var unforof = function (o, getnewname, used) {
964
967
  var iname = getnewname();
965
968
  var gname = getnewname();
966
969
  var oname;
967
- var useSimpleLoop = !(rootHyper || used.Symbol || hasawait);
970
+ var useSimpleLoop = !(rootHyper || used.Symbol) && !hasawait;
968
971
  if (!f.next && f.type === EXPRESS && !/\./.test(f.text) && used[f.origin || f.text.replace(/[\.\[][\s\S]*$/, '')].length === 1) {
969
972
  splice2(o, m);
970
973
  oname = f.text;
@@ -973,13 +976,13 @@ var unforof = function (o, getnewname, used) {
973
976
  oname = getnewname();
974
977
  splice2(o, n, f);
975
978
  var mo = splice2(o, f);
976
- if (useSimpleLoop) useSimpleLoop = mo.length === 1 && (mo[0].type === EXPRESS || mo[0].type === SCOPED && mo[0].entry === "[");
977
- o.push(...scanner2(`${oname}=`));
978
- o.push(...mo);
979
- o.push({ type: STAMP, text: ',' });
979
+ if (useSimpleLoop && !hasawait) useSimpleLoop = mo.length === 1 && (mo[0].type === EXPRESS || mo[0].type === SCOPED && mo[0].entry === "[");
980
+ splice(o, o.length, 0, ...scanner2(`${oname}=`));
981
+ splice(o, o.length, 0, ...mo);
982
+ splice(o, o.length, 0, { type: STAMP, text: ',' });
980
983
  }
981
- if (useSimpleLoop) o.push(...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
982
- else rootenvs.Symbol = true, o.push(...scanner2(`${gname}=${hasawait ? `${oname}[Symbol["asyncIterator"]]||${oname}[Symbol["iterator"]]` : `${oname}[Symbol["iterator"]]||${oname}[Symbol["asyncIterator"]]`}||Array["prototype"][Symbol["iterator"]],${gname}=${gname}["call"](${oname}),${iname}=${hasawait ? "await " : ''}${gname}["next"]();!${iname}["done"]&&(${createString([p])}=${iname}["value"],true);${iname}=${gname}["next"]()`));
984
+ if (useSimpleLoop) splice(o, o.length, 0, ...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
985
+ else rootenvs.Symbol = true, splice(o, o.length, 0, ...scanner2(`${gname}=${hasawait ? `${oname}[Symbol["asyncIterator"]]||${oname}[Symbol["iterator"]]` : `${oname}[Symbol["iterator"]]||${oname}[Symbol["asyncIterator"]]`}||Array["prototype"][Symbol["iterator"]],${gname}=${gname}["call"](${oname}),${iname}=${hasawait ? "await " : ''}${gname}["next"]();!${iname}["done"]&&(${createString([p])}=${iname}["value"],true);${iname}=${gname}["next"]()`));
983
986
  relink(o);
984
987
  };
985
988
  var unarrow = function (body, i, killobj, letname_) {
@@ -1351,8 +1354,10 @@ var down = function (scoped) {
1351
1354
  a: if (scoped.head) {
1352
1355
  var hp = scoped.head.prev;
1353
1356
  if (hp && hp.type === STRAP) {
1357
+ if (hp && hp.type === STRAP && hp.text === 'await') hp = hp.prev;
1358
+ if (!hp) break a;
1354
1359
  if (hp.text === 'for') {
1355
- unforof(scoped.head, getdeepname, scoped.used);
1360
+ unforof(hp.next, getdeepname, scoped.used);
1356
1361
  killed = unforin(scoped.head, getdeepname, _killobj.bind(null, _getlocal)) !== false;
1357
1362
  // unforcx(scoped.head, getdeepname);
1358
1363
  }
@@ -118,6 +118,18 @@ assert(downLevel(`()=>({\r\nfileName: entry.fileName,\r\ntextSpan: highlightSpan
118
118
  fileName: entry.fileName,
119
119
  textSpan: highlightSpan.textSpan,
120
120
  isWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */ }, highlightSpan.isInString && { isInString: true }, highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan })) }`);
121
+ assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return async_(
122
+ function () {
123
+ _0 = {}; _ = _0; if (!argitem.sort) return [1, 0]; _1 = argitem.sort; return [2, 0]
124
+ },
125
+ function () {
126
+ _1 = 'date'; return [1, 0]
127
+ },
128
+ function () {
129
+ _[_1] = "desc"; _0 = (_); _0 = (_0); return [_0, 2]
130
+ })
131
+ var _0, _1 }
132
+ var _`);
121
133
  assert(downLevel(`={...{a:1}}`), `= extend({}, { a: 1 })`);
122
134
  assert(downLevel(`={...a,...c}`), `= extend({}, a, c)`);
123
135
  assert(downLevel(`={a:a,...b,c}`), `= (_ = extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
@@ -174,6 +186,40 @@ assert(downLevel(`function (a,...b){}`), `var slice_ = Array["prototype"]["slice
174
186
  assert(downLevel(`function (a,...b,c){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a, c) { var b = slice_["call"](arguments, 1, -1); c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
175
187
  assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
176
188
  assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
189
+ assert(downLevel(`for await(o of os) noSymbol`), `return async_(
190
+ function () {
191
+ _3 = Symbol["asyncIterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = Array["prototype"][_3]
192
+ },
193
+ function () {
194
+ _0 = _2; _2 = _0["call"](os); _0 = _2; _2 = _0["next"](); return [_2, 1]
195
+ },
196
+ function (_1) {
197
+ _2 = _1; _ = _2; return [1, 0]
198
+ },
199
+ function () {
200
+ _2 = !_["done"]; if (!_2) return [1, 0]; _3 = _["value"]; o = _3; _2 = (true)
201
+ },
202
+ function () {
203
+ if (!_2) return [1, 0]; noSymbol; _2 = _0["next"](); _ = _2; return [-1, 0]
204
+ })
205
+ var _, _0, _2, _3`)
206
+ assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return async_(
207
+ function () {
208
+ o; s; _4 = Symbol["asyncIterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = Array["prototype"][_4]
209
+ },
210
+ function () {
211
+ _0 = _3; _3 = _0["call"](os); _0 = _3; _3 = _0["next"](); return [_3, 1]
212
+ },
213
+ function (_2) {
214
+ _3 = _2; _ = _3; return [1, 0]
215
+ },
216
+ function () {
217
+ _3 = !_["done"]; if (!_3) return [1, 0]; _4 = _["value"]; _1 = _4; _5 = _1[0]; o = _5; _6 = _1[1]; s = _6; _3 = (true)
218
+ },
219
+ function () {
220
+ if (!_3) return [1, 0]; noSymbol; _3 = _0["next"](); _ = _3; return [-1, 0]
221
+ })
222
+ var o, s, _, _0, _1, _3, _4, _5, _6`)
177
223
  assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0, _0 = os["length"]; _ < _0 && (o = os[_], true); _++) noSymbol\r\nvar _, _0`)
178
224
  assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
179
225
  assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
@@ -123,7 +123,7 @@ var _switch = function (body, cx, unblock, result, getname) {
123
123
  var o = body[cx];
124
124
  o = o.next;
125
125
  if (!o) return;
126
- var qt = _express(o, getname, true);
126
+ var qt = ternary(o, getname, true);
127
127
  for (var q of qt) if (q.length) pushstep(result, q);
128
128
  var q = qt[qt.length - 1];
129
129
  var qn = q.name;
@@ -142,7 +142,7 @@ var _switch = function (body, cx, unblock, result, getname) {
142
142
  var getnextname = function (deep) {
143
143
  return getname(deep + 1);
144
144
  };
145
- var q = _express(block, getnextname, true);
145
+ var q = ternary(block, getnextname, true);
146
146
  for (var q of q) if (q.length) pushstep(result, q);
147
147
  var qe = q;
148
148
  if (qe.name) var case_ = scanner2(`if(${qn}===${qe.name})return[]`);
@@ -435,7 +435,7 @@ var remove_end_comma = function (o) {
435
435
  }
436
436
  }
437
437
  if (m && m.type === STAMP && m.text === ',') {
438
- o.splice(cx, cx + 1);
438
+ splice(o, cx, o.length - cx);
439
439
  }
440
440
  };
441
441
  var isEvalScope = function (o) {
@@ -477,26 +477,28 @@ var _invoke = function (t, getname) {
477
477
  remove_end_comma(o);
478
478
  var iseval = isEvalScope(o);
479
479
  for (var cy = 0; cy < o.length; cy++) {
480
- if (o[cy].type & (SPACE | COMMENT)) continue;
481
480
  var by = cy;
482
- var c = o[cy];
483
- if (c.type & STAMP && /^[,;]$/.test(c.text)) continue;
481
+ while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
482
+ var ay = cy;
484
483
  cy = skipAssignment(o, cy);
485
- if (by === cy) continue;
486
- var m = o.slice(by, cy);
484
+ var ey = cy;
485
+ if (ay === ey || ay >= o.length) continue;
486
+ var m = o.slice(ay, ey);
487
487
  if (m.length === 1 && (m[0].type === EXPRESS && !/\./.test(m[0].text) || m[0].type === VALUE || m[0].type === QUOTED && !m[0].length)) {
488
488
  continue;
489
489
  }
490
490
  var q = toqueue(m, getdeepname, true);
491
491
  var qe = q[q.length - 1];
492
492
  if (!iseval || m[m.length - 1] === o.last) {
493
- splice(o, by, cy - by, { text: qe.name, type: EXPRESS });
493
+ splice(o, by, ey - by, { text: qe.name, type: EXPRESS });
494
494
  cy = by + 1;
495
495
  }
496
496
  else {
497
- while (o[cy].type & (SPACE | COMMENT)) cy++;
498
- splice(o, by, cy - by + 1);
499
- cy = by;
497
+ while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
498
+ var c = o[cy];
499
+ if (c && c.type & STAMP && /^[,;]$/.test(c.text)) cy++;
500
+ splice(o, 0, cy);
501
+ cy = -1;
500
502
  }
501
503
  cache.push(...q);
502
504
  nameindex++;
@@ -650,7 +652,7 @@ var ternary = function (body, getname, ret) {
650
652
  for (var a of ass) {
651
653
  if (a.type === SCOPED) {
652
654
  if (a.entry === '[') {
653
- var q = _express(a, getnextname, true);
655
+ var q = ternary(a, getnextname, true);
654
656
  for (var q of q) {
655
657
  if (q.length) pushstep(explist, q);
656
658
  }
@@ -671,6 +673,7 @@ var ternary = function (body, getname, ret) {
671
673
  eq.text = "=";
672
674
  var q2 = explist2[explist2.length - 1];
673
675
  an = q2.name;
676
+ asn = scanner2(an);
674
677
  }
675
678
  else an = n;
676
679
  ass.push(equals[i], ...asn);
@@ -786,14 +789,9 @@ var _express = function (body, getname, ret) {
786
789
  cache.push(b, p);
787
790
  continue;
788
791
  }
789
- var name = getname(nameindex);
790
- var n = scanner2(name);
791
- q.name = name;
792
- n.index = nameindex;
793
- n.push(b.pop());
794
-
792
+ var pb = b.pop();
795
793
  if (cache.length) nameindex = cache[cache.length - 2].index;
796
- else if (isor) n.pop(), q.push(...scanner2(`${getname(nameindex)}=`), ...b);
794
+ else if (isor) q.push(...scanner2(`${getname(nameindex)}=`), ...b);
797
795
 
798
796
  while (cache.length && cache[cache.length - 1] >= p) {
799
797
  if (needcomma(q)) q.push({ type: STAMP, text: ',' });
@@ -803,10 +801,12 @@ var _express = function (body, getname, ret) {
803
801
  if (p0 > powermap["="] || isawait) q.push(...scanner2(`${getname(t.index)}=`));
804
802
  q.push.apply(q, t);
805
803
  q.push.apply(q, b);
804
+ b = scanner2(`${getname(t.index)}`);
805
+ nameindex = t.index;
806
806
  if (isawait) q.push(NEXT);
807
807
  }
808
- nameindex++;
809
- if (maxindex < nameindex) maxindex = nameindex;
808
+ var name = getname(nameindex);
809
+ q.name = name;
810
810
  if (isor) {
811
811
  if (o.text === '||') {
812
812
  q.push(RE);
@@ -820,7 +820,12 @@ var _express = function (body, getname, ret) {
820
820
  hasor = true;
821
821
  nameindex = 0;
822
822
  } else {
823
+ var n = scanner2(name);
824
+ n.index = nameindex;
825
+ n.push(pb);
826
+ nameindex++;
823
827
  cache.push(n, p);
828
+ if (maxindex < nameindex) maxindex = nameindex;
824
829
  }
825
830
  }
826
831
  else {
@@ -57,7 +57,7 @@ test("if(await a) await b", "_ = a; return [_, 1];\r\n if (!@) return [2, 0]; _
57
57
  test("for(a in b)", "for (a in b)", true);
58
58
  test("for(var a in b) a.push()", "for (var a in b) a.push()", true);
59
59
  test("for(;;)", "return [0, 0]", true);
60
- test("for(a = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], a = a.call(os), b = a.next(); !b.done && (o = b.value, true); b = a.next())", "_0 = Symbol.iterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.asyncIterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.iterator; _ = Array.prototype[_0];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; _0 = b.value; o = _0; _ = (true);\r\n if (!_) return [1, 0]; _ = a.next(); b = _; return [-1, 0]", true);
60
+ test("for(a = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], a = a.call(os), b = a.next(); !b.done && (o = b.value, true); b = a.next())", "_ = Symbol.iterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.asyncIterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.iterator; _ = Array.prototype[_];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; _ = b.value; o = _; _ = (true);\r\n if (!_) return [1, 0]; _ = a.next(); b = _; return [-1, 0]", true);
61
61
  test("for(a=0;a<1;a++)if(a==0)continue", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [2, 0]; _ = a == 0; if (_) return [1, 0]; return [1, 0];\r\n _ = a++; return [-1, 0]`, true);
62
62
  test("for(a=0;a<10;a++) await a", "a = 0; return [1, 0];\r\n _ = a < 10; if (!_) return [2, 0]; _ = a; return [_, 1];\r\n _ = @; _ = a++; return [-1, 0]", true);
63
63
  test("for(a=0;a<10;a++) await a, await b", "a = 0; return [1, 0];\r\n _ = a < 10; if (!_) return [3, 0]; _ = a; return [_, 1];\r\n _ = @; _ = b; return [_, 1];\r\n _ = @; _ = a++; return [-2, 0]", true);
@@ -85,6 +85,9 @@ test(`url += (/\\?/.test(url) ? "&" : "?") + datas;`, '_ = /\\?/.test(url); if (
85
85
  test(`a = newname.querySelector("input,textarea").value = c.name.replace(/\\/$/, '')`, `_ = c.name.replace(/\\/$/, ''); newname.querySelector("input,textarea").value = _; a = _`, true);
86
86
  test(`if (selected[f.url]) f.selected = true;`, `_ = f.url; _ = selected[_]; if (!_) return [1, 0]; f.selected = true; return [1, 0]`, true);
87
87
  test(`location.protocol + parseURL(a.b).host `, `_ = a.b; _ = parseURL(_); location.protocol + _.host`, true);
88
+ test(`var base = location.protocol + "//" + parseURL(this.$scope.data.host).host + "/";`, `_ = location.protocol + "//", _0 = this.$scope.data.host; _0 = parseURL(_0); _ = _ + _0.host, _ = _ + "/"; base = _`, true);
89
+ test(`a=a+b*c+c*d`, `_ = b * c, _ = a + _, _0 = c * d, _ = _ + _0; a = _`, true);
90
+ test(`cc.name += "<f test></f>"`, `_ = cc.name + "<f test></f>"; cc.name = _`, true);
88
91
  test("yield a", 'return [a, 3]', true);
89
92
  test("throw a", 'throw a', true);
90
93
  test("debugger", 'debugger', true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.0",
3
+ "version": "4.0.3",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {