开玩笑的动态moduleNameMapper吗?

时间:2019-07-28 21:56:55

标签: webpack jestjs babeljs babel-jest

由于我所依赖的库中的最新更改,我需要找到一种基于import语句动态提供模块的方法。

  • 我在webpack中有一个应用程序
  • 我的测试环境正在使用不带Webpack的JEST

以前,我有一个全局对象在导入后被“填充”,例如:

import 'library/foo'; // global: {foo: ...}
import 'library/bar'; // global: {foo: ..., bar: ...}
import 'library/example'; // global: {foo: ..., bar: ..., example: ...}

global.foo();
global.bar();
global.example()

由于更新,全局对象不再存在,因此我现在需要使用它,例如:

import { foo } from 'library/foo';
import { bar } from 'library/bar';
import { example } from 'library/example';

foo();
bar();
example();

在我的测试环境中,我被迫依赖一个包含所有依赖项的文件[1]。

所以我的moduleNameMapper是:

 moduleNameMapper: {
   '^library/(.*)': path/library.js' // adds everything to the global object
 }

如果我现在使用相同的moduleNameMapper,我会遇到foo(), bar(), example()不存在的问题,因为moduleNameMapper实际上实际上是返回global对象。

我需要它返回global.$1而不是global。 理想情况下,例如:

moduleNameMapper: {
   '^library/(.*)': () => require('library/example').$1` 
}

我知道此功能不存在-但是我还能做些其他事情来实现此功能吗?例如。使用变压器?

我无法更改/替换库。我当然可以尝试在jest / webpack之间建立紧密的集成,但这也会严重影响性能(webpack的构建非常重要)。

[1]该库具有一个可解决所有依赖性的单个文件,以及一组以amd样式编写的文件。不幸的是,AMD文件很难在webpack中进行解析/编译,并且需要多个插件/加载器才能正常工作。对于JEST,我依赖于一个文件,该文件公开了一个包含所有依赖项的对象。

0 个答案:

没有答案