是的,你可以做到这一点。我将展示一种可能的解决方案。
首先让我们创建backgroundLoader队列所需的块:
const queue = [];
const delay = 1000;
let isWaiting = false;
function requestLoad() {
    if (isWaiting) {
      return;
    }
    if (!queue.length) {
      return;
    }
    const loader = queue.pop();
    isWaiting = true;
    loader(() => {
      setTimeout(() => {
        isWaiting = false;
        requestLoad();
      }, delay)
    });
}
export default (loader) => {
  queue.push(loader);
  requestLoad();
}
此功能将在后台加载您的块,延迟 1 秒(您可以对其进行调整 - 例如在 5 秒后开始弹出队列或随机播放块数组)。
接下来,您必须注册您require.ensure的排队功能backgroundLoader:
import render from './render'; // not relevant in this example
import backgroundLoader from './backgroundLoader';
let lightTheme = (cb) => {
  require.ensure([], () => {
    cb(require('./themeA.css'));
  }, 'light');
}
let darkTheme = (cb) => {
  require.ensure([], () => {
    cb(require('./themeB.css'));
  }, 'dark');
}
let pinkTheme = (cb) => {
  require.ensure([], () => {
    cb(require('./themeC.css'));
  }, 'pink');
}
backgroundLoader(lightTheme);
backgroundLoader(darkTheme);
backgroundLoader(pinkTheme);
export default (themeName) => { // router simulation
  switch(themeName) {
    case 'light':
      lightTheme(render);
      break;
    case 'dark':
      darkTheme(render);
      break;
    case 'pink':
      pinkTheme(render);
      break;
  }
};
一旦你在switch语句中需要你的块,你就会传递render包含解析函数的函数。在backgroundLoader这个函数中将是空的,导致只加载head你的应用程序的块。
您可以在WebpackBin上看到此示例的完整代码(您可以检查网络以查看块是如何在后台加载的)