根据构建解决对两个不同模块的导入

Resolving an import to two different modules depending on build

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

我希望 webpack 像这样解析这些模块,具体取决于 Webpack 环境变量:

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

所以,我想要两个有两个不同的 'development' 构建:一个带有真实模块,另一个带有模拟其行为的虚拟模块。

我目前的成绩:

我能做到:

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

但我有一个问题:我正在编写一个 Electron 应用程序,我希望它们是外部的,已从 /node_modules/ 解决。如果我在 externals 配置部分列出这些模块,则此插件不起作用。

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

我在 Github 有一个 answer from @sokra:

Yes it's the NormalModuleReplacementPlugin not the ExternalModuleReplacementPlugin.

You may want to do this:

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

or this if you don't really need a regexp:

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