downloader资源加载的建议

版本:3.8.0
引擎代downloader代码中有这个代码,在downloadBundle函数中又再调用了downloadJsondownloadScript,如果我想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);
        }
    });
};

反正我都重写了一次

自己写一遍,如果引擎downloadBundle代码内容改了,我们还得再跟着改。这样不太友好。