使用webpack模拟库

lf5gs5x2  于 2023-10-19  发布在  Webpack
关注(0)|答案(2)|浏览(111)

我正在尝试替换一个库进行测试。
我想修改的代码:

import foo from 'foo-lib'; // foo-lib is a library dependency in package.json

我想把它导入src/mock-foo.js。
这是用于端到端测试的,所以我不能使用Jest mocks之类的东西。
我有一个开发专用的webpack. pdf。我尝试过:

resolve: {
    alias: {
      'foo-lib': path.resolve(__dirname, 'src/mock-foo.js')
    },
    extensions: ['.js'], // need this for some other aliases (not shown)
  },

我还在plugins数组中尝试了较旧的技术:

new webpack.NormalModuleReplacementPlugin(
    /foo-lib/,
    'mock-foo.js'
  ),

以及这些的几种变体。
我没有得到错误,但原始库加载每次。
这可能吗如果是,正确的语法是什么?

vlf7wbxs

vlf7wbxs1#

我看不出你的语法有什么问题。但是,您的webpack配置中可能有一些其他条款可能会干扰。你能发布整个webpack配置文件吗?
在我的例子中,我使用了相同的语法,只是我在externals中指定了模块,它优先于alias。从externals中删除模块解决了我的问题。

xt0899hw

xt0899hw2#

我想我已经找到了一个基于Replacing/aliasing a file using Webpack的解决方案。
使用is-number库进行测试(仅举一个简单的例子),它可以工作:

plugins: [
    new webpack.NormalModuleReplacementPlugin(
      /is-number/,
      require.resolve('./src/mock.js')
    ),
  ],

正如另一篇文章的一位评论者所提到的,目前还不清楚为什么resolve.alias方法不起作用。

相关问题