版本:3.8.0
引擎代downloader代码中有这个代码,在downloadBundle函数中又再调用了downloadJson,downloadScript,如果我想hook这个downloadJosn函数,那就需要把这个downloadBundle整个函数拷一份,把这个downloadJosn改成我的函数,这样很不方便,建议改成downloader._downloaders["downloadJson"],这样直接访问的是downloader的注册函数,如果外部有hook,也可以直接访问的是外部的hook函数。
const downloadBundle = (nameOrUrl: string, options: Record<string, any>, onComplete: ((err: Error | null, data?: any | null) => void)) => {
const bundleName = path.basename(nameOrUrl);
let url = nameOrUrl;
if (!REGEX.test(url)) {
if (downloader.remoteBundles.indexOf(bundleName) !== -1) {
url = `${downloader.remoteServerAddress}remote/${bundleName}`;
} else {
url = `assets/${bundleName}`;
}
}
const version = options.version || downloader.bundleVers[bundleName];
let count = 0;
const config = `${url}/config.${version ? `${version}.` : ''}json`;
let out: IConfigOption | null = null;
let error: Error | null = null;
downloadJson(config, options, (err, response) => {
error = err || error;
out = response as IConfigOption;
if (out) { out.base = `${url}/`; }
if (++count === 2) {
onComplete(error, out);
}
});
const jspath = `${url}/index.${version ? `${version}.` : ''}js`;
downloadScript(jspath, options, (err) => {
error = err || error;
if (++count === 2) {
onComplete(error, out);
}
});
};