Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.

Commit 81d9d8b

Browse files
committed
v3.0.0
1 parent 2290543 commit 81d9d8b

File tree

4 files changed

+43
-17
lines changed

4 files changed

+43
-17
lines changed

dist/index.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ const loader = {
1212
isReady: false,
1313
readys: [],
1414
scriptPath: '',
15+
head: undefined,
1516
init: function () {
1617
let run = () => __awaiter(this, void 0, void 0, function* () {
18+
this.head = document.getElementsByTagName('head')[0];
1719
if (typeof fetch !== 'function') {
18-
yield this.loadScript(document.getElementsByTagName('head')[0], 'https://cdn.jsdelivr.net/npm/[email protected]/fetch.min.js');
20+
yield this.loadScript('https://cdn.jsdelivr.net/npm/[email protected]/fetch.min.js');
1921
}
2022
this.isReady = true;
2123
for (let func of this.readys) {
@@ -480,8 +482,17 @@ const loader = {
480482
return list;
481483
});
482484
},
483-
loadScript: function (el, url) {
484-
return new Promise(function (resolve) {
485+
loadScript: function (url, el) {
486+
return new Promise((resolve) => {
487+
if (!el) {
488+
if (this.head) {
489+
el = this.head;
490+
}
491+
else {
492+
el = document.getElementsByTagName('head')[0];
493+
this.head = el;
494+
}
495+
}
485496
let script = document.createElement('script');
486497
script.addEventListener('load', function () {
487498
resolve(true);
@@ -493,11 +504,11 @@ const loader = {
493504
el.appendChild(script);
494505
});
495506
},
496-
loadScripts: function (el, urls, opt = {}) {
507+
loadScripts: function (urls, opt = {}) {
497508
return new Promise((resolve) => {
498509
let count = 0;
499510
for (let url of urls) {
500-
this.loadScript(el, url).then(function (res) {
511+
this.loadScript(url, opt.el).then(function (res) {
501512
var _a, _b;
502513
++count;
503514
if (res) {

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@litert/loader",
3-
"version": "2.1.5",
3+
"version": "3.0.0",
44
"description": "Simple browser module loader.",
55
"keywords": [
66
"litert",
@@ -26,11 +26,11 @@
2626
"dependencies": {},
2727
"devDependencies": {
2828
"@litert/typeguard": "^1.1.0",
29-
"@types/node": "^12.20.15",
29+
"@types/node": "^12.20.33",
3030
"@typescript-eslint/eslint-plugin": "^3.10.1",
3131
"@typescript-eslint/parser": "^3.10.1",
3232
"electron": "^10.4.7",
33-
"eslint": "^7.28.0",
34-
"typescript": "^4.3.2"
33+
"eslint": "^7.32.0",
34+
"typescript": "^4.4.4"
3535
}
3636
}

sources/index.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ const loader: ILoader = {
1212
isReady: false,
1313
readys: [],
1414
scriptPath: '',
15+
head: undefined,
1516

1617
init: function() {
1718
/** --- 文档装载完毕后需要执行的函数 --- */
1819
let run = async (): Promise<void> => {
20+
this.head = document.getElementsByTagName('head')[0];
1921
// --- 判断 fetch 是否存在 ---
2022
if (typeof fetch !== 'function') {
21-
await this.loadScript(document.getElementsByTagName('head')[0], 'https://cdn.jsdelivr.net/npm/[email protected]/fetch.min.js');
23+
await this.loadScript('https://cdn.jsdelivr.net/npm/[email protected]/fetch.min.js');
2224
}
2325
this.isReady = true;
2426
for (let func of this.readys) {
@@ -541,8 +543,17 @@ const loader: ILoader = {
541543
return list;
542544
},
543545

544-
loadScript: function(el: HTMLElement, url: string): Promise<boolean> {
545-
return new Promise(function(resolve) {
546+
loadScript: function(url: string, el?: HTMLElement): Promise<boolean> {
547+
return new Promise((resolve) => {
548+
if (!el) {
549+
if (this.head) {
550+
el = this.head;
551+
}
552+
else {
553+
el = document.getElementsByTagName('head')[0];
554+
this.head = el;
555+
}
556+
}
546557
let script = document.createElement('script');
547558
script.addEventListener('load', function() {
548559
resolve(true);
@@ -555,13 +566,14 @@ const loader: ILoader = {
555566
});
556567
},
557568

558-
loadScripts: function(el: HTMLElement, urls: string[], opt: {
569+
loadScripts: function(urls: string[], opt: {
559570
'loaded'?: (url: string, state: number) => void;
571+
'el'?: HTMLElement;
560572
} = {}): Promise<void> {
561573
return new Promise((resolve) => {
562574
let count = 0;
563575
for (let url of urls) {
564-
this.loadScript(el, url).then(function(res) {
576+
this.loadScript(url, opt.el).then(function(res) {
565577
++count;
566578
if (res) {
567579
opt.loaded?.(url, 1);

types/loader.d.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ interface ILoader {
55
readys: Array<() => void | Promise<void>>;
66
/** --- 当前 js 加载的基路径,一般为当前 JS 的路径 --- */
77
scriptPath: string;
8+
/** --- head element --- */
9+
head?: HTMLElement;
810
/**
911
* --- 初始化函数 ---
1012
*/
@@ -65,18 +67,19 @@ interface ILoader {
6567
}): Promise<Record<string, Blob | string>>;
6668
/**
6769
* --- 加载 script 标签 ---
68-
* @param el 在此标签中增加
6970
* @param url 增加的 js 文件地址
71+
* @param el 在此标签中增加
7072
*/
71-
loadScript(el: HTMLElement, url: string): Promise<boolean>;
73+
loadScript(url: string, el?: HTMLElement): Promise<boolean>;
7274
/**
7375
* --- 加载多个 script 标签 ---
7476
* @param el 在此标签中增加
7577
* @param urls 增加的 js 文件地址列表
7678
* @param opt loaded 回调函数
7779
*/
78-
loadScripts(el: HTMLElement, urls: string[], opt?: {
80+
loadScripts(urls: string[], opt?: {
7981
'loaded'?: (url: string, state: number) => void;
82+
'el'?: HTMLElement;
8083
}): Promise<void>;
8184
/**
8285
* --- 代码中异步加载文件 ---

0 commit comments

Comments
 (0)