vite-add-cdn-script 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +99 -92
- package/dist/index.umd.cjs +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
var D = Object.defineProperty;
|
2
2
|
var F = (n, t, e) => t in n ? D(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
|
3
|
-
var
|
4
|
-
import
|
5
|
-
import
|
3
|
+
var S = (n, t, e) => (F(n, typeof t != "symbol" ? t + "" : t, e), e);
|
4
|
+
import O from "node:path";
|
5
|
+
import y from "node:fs";
|
6
6
|
import b from "node:https";
|
7
7
|
class E {
|
8
8
|
constructor() {
|
9
|
-
|
10
|
-
|
11
|
-
this.cdnCachePath =
|
9
|
+
S(this, "cdnCache", {});
|
10
|
+
S(this, "cdnCachePath", "");
|
11
|
+
this.cdnCachePath = O.resolve(process.cwd(), "./.cdn-cache.json");
|
12
12
|
}
|
13
13
|
// 初始化cdn缓存
|
14
14
|
async init() {
|
15
15
|
try {
|
16
|
-
const t = await
|
16
|
+
const t = await y.readFileSync(this.cdnCachePath, "utf-8");
|
17
17
|
this.cdnCache = JSON.parse(t);
|
18
18
|
} catch {
|
19
|
-
console.log("cdn缓存文件不存在,创建缓存文件"), this.cdnCache = {}, await
|
19
|
+
console.log("cdn缓存文件不存在,创建缓存文件"), this.cdnCache = {}, await y.writeFileSync(this.cdnCachePath, "", "utf-8");
|
20
20
|
}
|
21
21
|
}
|
22
22
|
/**
|
@@ -43,48 +43,48 @@ class E {
|
|
43
43
|
* 更新cdn缓存
|
44
44
|
*/
|
45
45
|
async save() {
|
46
|
-
await
|
46
|
+
await y.writeFileSync(this.cdnCachePath, JSON.stringify(this.cdnCache), "utf-8");
|
47
47
|
}
|
48
48
|
}
|
49
|
-
let
|
50
|
-
const L = async () => (
|
49
|
+
let C;
|
50
|
+
const L = async () => (C || (C = new E(), await C.init()), C), $ = {
|
51
51
|
//get请求封装
|
52
52
|
get: (n, t, e) => new Promise((r, s) => {
|
53
53
|
try {
|
54
|
-
b.get(n, (
|
54
|
+
b.get(n, (c) => {
|
55
55
|
let o = "";
|
56
|
-
|
57
|
-
o +=
|
58
|
-
}),
|
56
|
+
c.on("data", (i) => {
|
57
|
+
o += i;
|
58
|
+
}), c.on("end", () => {
|
59
59
|
t == null || t(o), r(o);
|
60
60
|
});
|
61
61
|
});
|
62
|
-
} catch (
|
63
|
-
e == null || e(
|
62
|
+
} catch (c) {
|
63
|
+
e == null || e(c), s(c);
|
64
64
|
}
|
65
65
|
})
|
66
66
|
}, N = async (n) => {
|
67
67
|
const t = /^(https:\/\/.*\d+\.\d+\.\d+\/).+?\.js$/;
|
68
68
|
if (t.test(n)) {
|
69
69
|
const e = n.replace(t, (r, s) => `${s}package.json`);
|
70
|
-
return JSON.parse(await
|
70
|
+
return JSON.parse(await $.get(e));
|
71
71
|
} else
|
72
72
|
throw new Error(`${n} 不是正确的url`);
|
73
73
|
}, I = (n, t) => {
|
74
74
|
var e, r;
|
75
75
|
return ((e = n.dependencies) == null ? void 0 : e[t]) || ((r = n.devDependencies) == null ? void 0 : r[t]);
|
76
|
-
},
|
76
|
+
}, J = (n) => n.reduce((t, e) => (e.type === "file" ? t.push({ name: e.path }) : e.files && t.push(...J(e.files)), t), []), k = {
|
77
77
|
jsdelivr: {
|
78
78
|
getFileList: (n, t) => new Promise((e, r) => {
|
79
|
-
|
79
|
+
$.get(
|
80
80
|
`https://data.jsdelivr.com/v1/stats/packages/npm/${n}@${t}/files`,
|
81
81
|
(s) => {
|
82
|
-
const
|
83
|
-
if (
|
82
|
+
const c = JSON.parse(s);
|
83
|
+
if (c.length === 0) {
|
84
84
|
r(new Error(`${n}@${t} not found`));
|
85
85
|
return;
|
86
86
|
}
|
87
|
-
e({ fileList:
|
87
|
+
e({ fileList: c });
|
88
88
|
},
|
89
89
|
(s) => {
|
90
90
|
r(s);
|
@@ -96,11 +96,11 @@ const L = async () => ($ || ($ = new E(), await $.init()), $), f = {
|
|
96
96
|
},
|
97
97
|
unpkg: {
|
98
98
|
getFileList: (n, t) => new Promise((e, r) => {
|
99
|
-
|
99
|
+
$.get(
|
100
100
|
`https://unpkg.com/${n}@${t}/?meta`,
|
101
101
|
(s) => {
|
102
|
-
const
|
103
|
-
e({ fileList:
|
102
|
+
const c = JSON.parse(s);
|
103
|
+
e({ fileList: J(c.files || []) });
|
104
104
|
},
|
105
105
|
(s) => {
|
106
106
|
r(s);
|
@@ -111,15 +111,15 @@ const L = async () => ($ || ($ = new E(), await $.init()), $), f = {
|
|
111
111
|
},
|
112
112
|
bootcdn: {
|
113
113
|
getFileList: (n, t) => new Promise((e, r) => {
|
114
|
-
|
114
|
+
$.get(
|
115
115
|
`https://api.bootcdn.cn/libraries/${n}`,
|
116
116
|
(s) => {
|
117
|
-
const
|
118
|
-
if (
|
117
|
+
const c = JSON.parse(s);
|
118
|
+
if (c.length === 0) {
|
119
119
|
r(new Error(`${n} not found in bootcdn`));
|
120
120
|
return;
|
121
121
|
}
|
122
|
-
const o =
|
122
|
+
const o = c[0], a = o.assets.find((d) => d.version === t);
|
123
123
|
if (!a) {
|
124
124
|
r(new Error(`${n}@${t} not found in ${o.name}`));
|
125
125
|
return;
|
@@ -138,16 +138,16 @@ const L = async () => ($ || ($ = new E(), await $.init()), $), f = {
|
|
138
138
|
},
|
139
139
|
cdnjs: {
|
140
140
|
getFileList: (n, t) => new Promise((e, r) => {
|
141
|
-
|
141
|
+
$.get(
|
142
142
|
`https://api.cdnjs.com/libraries/${n}/${t}`,
|
143
143
|
(s) => {
|
144
|
-
const
|
145
|
-
if (
|
144
|
+
const c = JSON.parse(s);
|
145
|
+
if (c.error) {
|
146
146
|
r(new Error(`cdnjs: ${n}@${t} not found`));
|
147
147
|
return;
|
148
148
|
}
|
149
149
|
e({
|
150
|
-
fileList:
|
150
|
+
fileList: c.rawFiles.map((o) => ({
|
151
151
|
name: "/" + o
|
152
152
|
}))
|
153
153
|
});
|
@@ -164,14 +164,14 @@ const L = async () => ($ || ($ = new E(), await $.init()), $), f = {
|
|
164
164
|
const r = (o = t.match(/\d+(.\d+)?(.\d+)?/)) == null ? void 0 : o[0];
|
165
165
|
if (!r)
|
166
166
|
throw new Error(`${n} version ${t} is not valid`);
|
167
|
-
const s = await
|
168
|
-
throw
|
169
|
-
}),
|
170
|
-
if (!
|
167
|
+
const s = await k[e].getFileList(n, r).catch((i) => {
|
168
|
+
throw i;
|
169
|
+
}), c = A(s, n);
|
170
|
+
if (!c)
|
171
171
|
throw new Error(`在 ${e} 中找不到 ${n}@${r} 文件,请检查包名或版本号`);
|
172
|
-
return
|
172
|
+
return k[e].getUrl(n, r, c);
|
173
173
|
}, A = ({ fileList: n }, t) => {
|
174
|
-
var
|
174
|
+
var c, o;
|
175
175
|
let e = [
|
176
176
|
`umd/${t}.production.min.js`,
|
177
177
|
/umd\/.+?\.production\.min\.js$/,
|
@@ -189,10 +189,10 @@ const L = async () => ($ || ($ = new E(), await $.init()), $), f = {
|
|
189
189
|
/\.min\.js$/,
|
190
190
|
/\.js$/
|
191
191
|
];
|
192
|
-
const r = ["runtime", "compiler", ".esm", ".cjs", "development"].filter((
|
192
|
+
const r = ["runtime", "compiler", ".esm", ".cjs", "development"].filter((i) => !t.includes(i));
|
193
193
|
let s = "";
|
194
|
-
for (let
|
195
|
-
if (
|
194
|
+
for (let i of e)
|
195
|
+
if (i instanceof RegExp ? s = ((c = n.find((a) => i.test(a.name) && !r.some((l) => a.name.includes(l)))) == null ? void 0 : c.name) || "" : s = ((o = n.find((a) => a.name.includes(i) && !r.some((l) => a.name.includes(l)))) == null ? void 0 : o.name) || "", s)
|
196
196
|
break;
|
197
197
|
return s;
|
198
198
|
};
|
@@ -202,11 +202,11 @@ function M(n, t) {
|
|
202
202
|
e.push("0");
|
203
203
|
for (; r.length < s; )
|
204
204
|
r.push("0");
|
205
|
-
for (let
|
206
|
-
const o = parseInt(e[
|
207
|
-
if (o >
|
205
|
+
for (let c = 0; c < s; c++) {
|
206
|
+
const o = parseInt(e[c], 10), i = parseInt(r[c], 10);
|
207
|
+
if (o > i)
|
208
208
|
return 1;
|
209
|
-
if (o <
|
209
|
+
if (o < i)
|
210
210
|
return -1;
|
211
211
|
}
|
212
212
|
return 0;
|
@@ -216,40 +216,41 @@ function V(n, t) {
|
|
216
216
|
Object.prototype.hasOwnProperty.call(t, e) && (n[e] ? M(n[e], t[e]) === -1 && (n[e] = t[e]) : n[e] = t[e]);
|
217
217
|
return n;
|
218
218
|
}
|
219
|
-
async function
|
220
|
-
let s = [],
|
219
|
+
async function v({ external: n, packageData: t, customScript: e, defaultCdns: r }) {
|
220
|
+
let s = [], c = !1;
|
221
221
|
const o = await L();
|
222
222
|
return await Promise.all(
|
223
|
-
n.map(async (
|
224
|
-
const a = I(t,
|
225
|
-
if (e[
|
223
|
+
n.map(async (i) => {
|
224
|
+
const a = I(t, i);
|
225
|
+
if (e[i])
|
226
226
|
return {
|
227
227
|
urls: [],
|
228
|
-
key:
|
228
|
+
key: i
|
229
229
|
};
|
230
|
-
if (!a)
|
231
|
-
s.push(
|
232
|
-
|
233
|
-
|
234
|
-
|
230
|
+
if (!a)
|
231
|
+
return s.push(i), {
|
232
|
+
urls: [],
|
233
|
+
key: i
|
234
|
+
};
|
235
|
+
const l = o.getCdnCache(i, a);
|
235
236
|
if (l)
|
236
237
|
return {
|
237
238
|
urls: l,
|
238
|
-
key:
|
239
|
+
key: i
|
239
240
|
};
|
240
241
|
{
|
241
|
-
|
242
|
+
c = !0, console.log(`从网络获取${i}${a}的cdn地址`);
|
242
243
|
const d = {
|
243
244
|
urls: await Promise.all(
|
244
|
-
r.map(async (h) => await R(
|
245
|
+
r.map(async (h) => await R(i, a, h))
|
245
246
|
),
|
246
|
-
key:
|
247
|
+
key: i
|
247
248
|
};
|
248
|
-
return o.setCdnCache(
|
249
|
+
return o.setCdnCache(i, a, d.urls), d;
|
249
250
|
}
|
250
251
|
})
|
251
|
-
).then((
|
252
|
-
urls:
|
252
|
+
).then((i) => (c && o.save(), {
|
253
|
+
urls: i,
|
253
254
|
noVersionPackages: s
|
254
255
|
}));
|
255
256
|
}
|
@@ -260,54 +261,60 @@ function q(n) {
|
|
260
261
|
name: "vite-add-cdn-script",
|
261
262
|
enforce: "pre",
|
262
263
|
apply: "build",
|
263
|
-
config(
|
264
|
-
s =
|
264
|
+
config(c) {
|
265
|
+
s = c;
|
265
266
|
},
|
266
|
-
async transformIndexHtml(
|
267
|
+
async transformIndexHtml(c) {
|
267
268
|
if (!r || r.length === 0)
|
268
269
|
throw new Error("defaultCdns不能为空");
|
269
|
-
const o =
|
270
|
+
const o = O.resolve(process.cwd(), "package.json");
|
270
271
|
try {
|
271
|
-
const
|
272
|
+
const i = y.readFileSync(o, "utf-8"), a = JSON.parse(i), l = s.build.rollupOptions.external, d = {};
|
272
273
|
let h = "";
|
273
|
-
const { urls:
|
274
|
+
const { urls: P, noVersionPackages: U } = await v({
|
274
275
|
external: l,
|
275
276
|
packageData: a,
|
276
277
|
customScript: t,
|
277
278
|
defaultCdns: r
|
278
279
|
});
|
279
|
-
if (
|
280
|
-
const
|
280
|
+
if (U.length > 0) {
|
281
|
+
const f = { dependencies: {} };
|
281
282
|
await Promise.all(
|
282
|
-
|
283
|
-
if (!
|
283
|
+
P.map(async (p) => {
|
284
|
+
if (!p)
|
284
285
|
return;
|
285
|
-
const { key:
|
286
|
-
if (!
|
286
|
+
const { key: j, urls: x } = p, m = t[j] || x[0];
|
287
|
+
if (!m)
|
287
288
|
return;
|
288
|
-
const
|
289
|
-
V(
|
289
|
+
const g = await N(m);
|
290
|
+
V(f.dependencies, g.dependencies);
|
290
291
|
})
|
291
292
|
);
|
292
|
-
const { urls:
|
293
|
-
external:
|
294
|
-
packageData:
|
293
|
+
const { urls: w, noVersionPackages: u } = await v({
|
294
|
+
external: U,
|
295
|
+
packageData: f,
|
295
296
|
customScript: t,
|
296
297
|
defaultCdns: r
|
297
298
|
});
|
298
|
-
if (
|
299
|
+
if (w.map((p) => {
|
300
|
+
var m;
|
301
|
+
if (!p)
|
302
|
+
return;
|
303
|
+
const { urls: j, key: x } = p;
|
304
|
+
(m = P.find((g) => (g == null ? void 0 : g.key) === x)) == null || m.urls.push(...j);
|
305
|
+
}), u.length > 0)
|
299
306
|
throw console.error(`找不到${u.join(",")}的版本`), new Error(`找不到${u.join(",")}的版本`);
|
300
307
|
}
|
301
|
-
return
|
302
|
-
if (!
|
308
|
+
return P.forEach((f) => {
|
309
|
+
if (!f)
|
303
310
|
return;
|
304
|
-
const { urls:
|
311
|
+
const { urls: w, key: u } = f;
|
305
312
|
if (t[u])
|
306
313
|
h += t[u];
|
307
314
|
else {
|
308
|
-
d[u] =
|
309
|
-
const
|
310
|
-
h += `<script src="${
|
315
|
+
d[u] = w;
|
316
|
+
const p = w[0];
|
317
|
+
h += `<script src="${p}" type="text/javascript" crossorigin="anonymous" onerror="errorCDN(this)" data-cur="0" data-key="${u}"><\/script>
|
311
318
|
`;
|
312
319
|
}
|
313
320
|
}), h = `<script>
|
@@ -332,9 +339,9 @@ function q(n) {
|
|
332
339
|
document.head.appendChild(cdnDOM);
|
333
340
|
e.remove();
|
334
341
|
}
|
335
|
-
<\/script>` + h,
|
336
|
-
} catch (
|
337
|
-
console.error("获取dependencies出错:",
|
342
|
+
<\/script>` + h, c = c.replace("</head>", `${h}</head>`), c;
|
343
|
+
} catch (i) {
|
344
|
+
console.error("获取dependencies出错:", i);
|
338
345
|
}
|
339
346
|
}
|
340
347
|
};
|
package/dist/index.umd.cjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
(function(
|
1
|
+
(function(u,a){typeof exports=="object"&&typeof module<"u"?module.exports=a(require("node:path"),require("node:fs"),require("node:https")):typeof define=="function"&&define.amd?define(["node:path","node:fs","node:https"],a):(u=typeof globalThis<"u"?globalThis:u||self,u.index=a(u.path,u.fs,u.https))})(this,function(u,a,f){"use strict";var V=Object.defineProperty;var T=(u,a,f)=>a in u?V(u,a,{enumerable:!0,configurable:!0,writable:!0,value:f}):u[a]=f;var k=(u,a,f)=>(T(u,typeof a!="symbol"?a+"":a,f),f);class F{constructor(){k(this,"cdnCache",{});k(this,"cdnCachePath","");this.cdnCachePath=u.resolve(process.cwd(),"./.cdn-cache.json")}async init(){try{const e=await a.readFileSync(this.cdnCachePath,"utf-8");this.cdnCache=JSON.parse(e)}catch{console.log("cdn缓存文件不存在,创建缓存文件"),this.cdnCache={},await a.writeFileSync(this.cdnCachePath,"","utf-8")}}getCdnCache(e,t){var r;return(r=this.cdnCache[e])==null?void 0:r[t]}setCdnCache(e,t,r){this.cdnCache[e]?this.cdnCache[e][t]=r:this.cdnCache[e]={[t]:r}}async save(){await a.writeFileSync(this.cdnCachePath,JSON.stringify(this.cdnCache),"utf-8")}}let j;const E=async()=>(j||(j=new F,await j.init()),j),$={get:(n,e,t)=>new Promise((r,s)=>{try{f.get(n,i=>{let o="";i.on("data",c=>{o+=c}),i.on("end",()=>{e==null||e(o),r(o)})})}catch(i){t==null||t(i),s(i)}})},L=async n=>{const e=/^(https:\/\/.*\d+\.\d+\.\d+\/).+?\.js$/;if(e.test(n)){const t=n.replace(e,(r,s)=>`${s}package.json`);return JSON.parse(await $.get(t))}else throw new Error(`${n} 不是正确的url`)},b=(n,e)=>{var t,r;return((t=n.dependencies)==null?void 0:t[e])||((r=n.devDependencies)==null?void 0:r[e])},v=n=>n.reduce((e,t)=>(t.type==="file"?e.push({name:t.path}):t.files&&e.push(...v(t.files)),e),[]),O={jsdelivr:{getFileList:(n,e)=>new Promise((t,r)=>{$.get(`https://data.jsdelivr.com/v1/stats/packages/npm/${n}@${e}/files`,s=>{const i=JSON.parse(s);if(i.length===0){r(new Error(`${n}@${e} not found`));return}t({fileList:i})},s=>{r(s)})}),getUrl:(n,e,t)=>`https://cdn.jsdelivr.net/npm/${n}@${e}${t}`},unpkg:{getFileList:(n,e)=>new Promise((t,r)=>{$.get(`https://unpkg.com/${n}@${e}/?meta`,s=>{const i=JSON.parse(s);t({fileList:v(i.files||[])})},s=>{r(s)})}),getUrl:(n,e,t)=>`https://unpkg.com/${n}@${e}${t}`},bootcdn:{getFileList:(n,e)=>new Promise((t,r)=>{$.get(`https://api.bootcdn.cn/libraries/${n}`,s=>{const i=JSON.parse(s);if(i.length===0){r(new Error(`${n} not found in bootcdn`));return}const o=i[0],d=o.assets.find(h=>h.version===e);if(!d){r(new Error(`${n}@${e} not found in ${o.name}`));return}const l=d.files.map(h=>({name:"/"+h}));t({fileList:l,recommendFileName:o.filename})},s=>{r(s)})}),getUrl:(n,e,t)=>`https://cdn.bootcdn.net/ajax/libs/${n}/${e}${t}`},cdnjs:{getFileList:(n,e)=>new Promise((t,r)=>{$.get(`https://api.cdnjs.com/libraries/${n}/${e}`,s=>{const i=JSON.parse(s);if(i.error){r(new Error(`cdnjs: ${n}@${e} not found`));return}t({fileList:i.rawFiles.map(o=>({name:"/"+o}))})},s=>{r(s)})}),getUrl:(n,e,t)=>`https://cdnjs.cloudflare.com/ajax/libs/${n}/${e}${t}`}},N=async(n,e,t)=>{var o;const r=(o=e.match(/\d+(.\d+)?(.\d+)?/))==null?void 0:o[0];if(!r)throw new Error(`${n} version ${e} is not valid`);const s=await O[t].getFileList(n,r).catch(c=>{throw c}),i=I(s,n);if(!i)throw new Error(`在 ${t} 中找不到 ${n}@${r} 文件,请检查包名或版本号`);return O[t].getUrl(n,r,i)},I=({fileList:n},e)=>{var i,o;let t=[`umd/${e}.production.min.js`,/umd\/.+?\.production\.min\.js$/,/dist\/.+?\.production\.min\.js$/,/dist\/.+?\.umd\.min\.js$/,`dist/${e}.prod.min.js`,/dist\/.+?\.global.prod.min.js/,`dist/${e}.min.js`,/.+?\.global.prod.min.js/,/.+?.global.prod.js/,/lib\/.+?\.min\.js$/,/dist\/.+?\.min\.js$/,/index\.min\.js$/,/index\.js$/,/\.min\.js$/,/\.js$/];const r=["runtime","compiler",".esm",".cjs","development"].filter(c=>!e.includes(c));let s="";for(let c of t)if(c instanceof RegExp?s=((i=n.find(d=>c.test(d.name)&&!r.some(l=>d.name.includes(l))))==null?void 0:i.name)||"":s=((o=n.find(d=>d.name.includes(c)&&!r.some(l=>d.name.includes(l))))==null?void 0:o.name)||"",s)break;return s};function R(n,e){const t=n.replace(/^\D/,"").split("."),r=e.replace(/^\D/,"").split("."),s=Math.max(t.length,r.length);for(;t.length<s;)t.push("0");for(;r.length<s;)r.push("0");for(let i=0;i<s;i++){const o=parseInt(t[i],10),c=parseInt(r[i],10);if(o>c)return 1;if(o<c)return-1}return 0}function A(n,e){for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]?R(n[t],e[t])===-1&&(n[t]=e[t]):n[t]=e[t]);return n}async function J({external:n,packageData:e,customScript:t,defaultCdns:r}){let s=[],i=!1;const o=await E();return await Promise.all(n.map(async c=>{const d=b(e,c);if(t[c])return{urls:[],key:c};if(!d)return s.push(c),{urls:[],key:c};const l=o.getCdnCache(c,d);if(l)return{urls:l,key:c};{i=!0,console.log(`从网络获取${c}${d}的cdn地址`);const h={urls:await Promise.all(r.map(async m=>await N(c,d,m))),key:c};return o.setCdnCache(c,d,h.urls),h}})).then(c=>(i&&o.save(),{urls:c,noVersionPackages:s}))}function M(n){const{customScript:e={},retryTimes:t=1,defaultCdns:r=["jsdelivr","unpkg"]}=n;let s;return{name:"vite-add-cdn-script",enforce:"pre",apply:"build",config(i){s=i},async transformIndexHtml(i){if(!r||r.length===0)throw new Error("defaultCdns不能为空");const o=u.resolve(process.cwd(),"package.json");try{const c=a.readFileSync(o,"utf-8"),d=JSON.parse(c),l=s.build.rollupOptions.external,h={};let m="";const{urls:x,noVersionPackages:D}=await J({external:l,packageData:d,customScript:e,defaultCdns:r});if(D.length>0){const w={dependencies:{}};await Promise.all(x.map(async g=>{if(!g)return;const{key:S,urls:U}=g,C=e[S]||U[0];if(!C)return;const y=await L(C);A(w.dependencies,y.dependencies)}));const{urls:P,noVersionPackages:p}=await J({external:D,packageData:w,customScript:e,defaultCdns:r});if(P.map(g=>{var C;if(!g)return;const{urls:S,key:U}=g;(C=x.find(y=>(y==null?void 0:y.key)===U))==null||C.urls.push(...S)}),p.length>0)throw console.error(`找不到${p.join(",")}的版本`),new Error(`找不到${p.join(",")}的版本`)}return x.forEach(w=>{if(!w)return;const{urls:P,key:p}=w;if(e[p])m+=e[p];else{h[p]=P;const g=P[0];m+=`<script src="${g}" type="text/javascript" crossorigin="anonymous" onerror="errorCDN(this)" data-cur="0" data-key="${p}"><\/script>
|
2
2
|
`}}),m=`<script>
|
3
3
|
function errorCDN(e) {
|
4
4
|
const packNameUrl = JSON.parse('${JSON.stringify(h)}');
|
@@ -21,4 +21,4 @@
|
|
21
21
|
document.head.appendChild(cdnDOM);
|
22
22
|
e.remove();
|
23
23
|
}
|
24
|
-
<\/script>`+m,i=i.replace("</head>",`${m}</head>`),i}catch(c){console.error("获取dependencies出错:",c)}}}}return
|
24
|
+
<\/script>`+m,i=i.replace("</head>",`${m}</head>`),i}catch(c){console.error("获取dependencies出错:",c)}}}}return M});
|