@investravis.com/hexo-goose-builder
Version:
An exploratory plugin that aims to introduce a theme builder for Hexo, which supports modular development in the theme building process and supports popular ESM scripts and TailwindCSS, etc.
59 lines (49 loc) • 1.56 kB
JavaScript
// Hexo Theme Component Chunk Loader
(function() {
const loadedChunks = new Set();
const loadingPromises = new Map();
// 加载单个脚本
function loadScript(src) {
if (loadingPromises.has(src)) {
return loadingPromises.get(src);
}
const promise = new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.async = true;
script.onload = () => {
loadedChunks.add(src);
loadingPromises.delete(src);
resolve();
};
script.onerror = () => {
loadingPromises.delete(src);
reject(new Error(`Failed to load script: ${src}`));
};
document.head.appendChild(script);
});
loadingPromises.set(src, promise);
return promise;
}
// 并行加载所有块
window.loadComponentChunks = async function() {
try {
const response = await fetch('/js/components.manifest.json');
const manifest = await response.json();
// 并行加载所有块
const loadPromises = manifest.bundles.map(bundle =>
loadScript(`/js/${bundle.file}`)
);
await Promise.all(loadPromises);
console.log('All component chunks loaded successfully');
} catch (error) {
console.error('Error loading component chunks:', error);
}
};
// 在DOMContentLoaded时自动加载
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', window.loadComponentChunks);
} else {
window.loadComponentChunks();
}
})();