由于我所依赖的库中的最新更改,我需要找到一种基于import语句动态提供模块的方法。
以前,我有一个全局对象在导入后被“填充”,例如:
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,我依赖于一个文件,该文件公开了一个包含所有依赖项的对象。