在webpack中,强制一些模块在启动时自动加载

Fra*_*ger 6 webpack

在我的服务器端捆绑包中,我有一些包含服务器端api的模块,我想尽快加载(并运行)这些模块(与入口点同时).

我有一些限制:

  • 我不知道这些模块的名称(它们是在编译期间生成的,它们只是从加载器"标记",使用this._module.meta.myApiModule = true).
    这些模块在同构Web应用程序中的客户端和服务器之间部分共享.客户端知道服务器模块哈希,因为客户端和服务器端模块共享相同的哈希值(感谢webpack.HashedModuleIdsPlugin).在某些情况下,客户端对服务器进行api调用,并且必须在调用之前加载保存api的模块.

  • 必须在启动时调用(必需)所有标记的模块.
    这些模块包含注册其api的代码(例如mainFramowork.registerRpcApi(...)),这就是它们必须在启动时加载的原因.

更多细节:

我使用vuejs,我的.vue文件由webpack处理.每个vue文件生成webpack模块(用于脚本部分,标记部分,样式和可以自由使用的customBlocks)

foo.vue (file)
-> html (webpack module)
-> script (webpack module)
-> style (webpack module)
-> customBlock (webpack module, rawRequest:"!!babel-loader!addmeta-loader?{"mark":"api"}!XXX/node_modules/vue-loader/lib/selector?type=customBlocks&index=1!./foo.vue")

bar.vue
-> html (webpack module)
-> script (webpack module)
-> style (webpack module)
-> customBlock (webpack module, rawRequest:"!!babel-loader!addmeta-loader?{"mark":"api"}!XXX/node_modules/vue-loader/lib/selector?type=customBlocks&index=1!./bar.vue")
Run Code Online (Sandbox Code Playgroud)

现在,我的目标是调用所有这些"customBlock模块":

  • 在启动时(如何??)
  • 在块加载上(可能在块中有一个入口点,这意味着将所有我的customBlocks模块移动到一个新块中,然后动态创建一个模块,它将调用我所有的customBlock模块(哇))或者
  • 手工:require('please_call_all_custom_blocks_modules_thanks')
  • 使用装载机: require('please_call_all_custom_blocks_modules_thanks!')

我不知道

Ton*_*ent 0

我想你想要的是这样的

// loader.js
var moduleName = getSomeModuleNameInRuntime();
require("bundle!./path/" + moduleName)(function(myModule) {
  // ...
});
Run Code Online (Sandbox Code Playgroud)

在这里看到这个问题