根据构建将导入解析为两个不同的模块

时间:2019-01-09 16:56:44

标签: webpack webpack-4

我有两个模块:mymodule-realmymodule-dummy

我希望webpack根据Webpack环境变量来解析这些模块:

mymodule -> mymodule-real
or
mymodule -> mymodule-dummy

因此,我希望有两个不同的“开发”版本:一个带有真实模块,另一个带有模拟其行为的虚拟模块。

到目前为止我的成功:

我能够做到这一点:

  plugins: [
    new webpack.NormalModuleReplacementPlugin(/mymodule/, function(resource) {
      resource.request = 'mymodule-' + (USE_DUMMY ? 'dummy' : 'real');
    })
  ]

但是我有一个问题:我正在编写一个Electron应用程序,我希望它们是外部的,可以通过/node_modules/进行解析。如果我在externals config部分中列出了这些模块,则此插件不起作用。

我可以使用Webpack重定向外部模块的导入吗?

1 个答案:

答案 0 :(得分:0)

我在Github上有一个answer from @sokra

  

是的,它是NormalModuleReplacementPlugin而不是   外部模块替换插件。

     

您可能想这样做:

  externals: (context, request, callback) => {
    if(/mymodule/.test(request) {
      return callback(null, USE_DUMMY ? 'mymodule-dummy' : 'mymodule-real'
    }
    callback();
  }
     

或如果您真的不需要正则表达式,则此:

externals: {
  mymodule: USE_DUMMY ? 'mymodule-dummy' : 'mymodule-real'
}