我正在尝试配置 jest 以防止导入模块。
我正在处理的代码库在同一个包中包含服务器端代码和客户端代码,并且在所有面向客户端的代码上都有 lodash 的外部 webpack 依赖项。 Lodash 从 CDN 加载以帮助站点性能。但是,提供客户端代码的服务器可以使用开发人员想要使用的任何版本,因为没有性能优势。当开发人员不可避免地使用 lodash 客户端版本中不可用的功能时,这具有客户端代码破坏的缺点。
最好的解决方案是将软件包版本调整为 CDN 上可用的版本,但此时修复它太复杂且耗时。
基本上,我试图使用 Jest 来使尝试使用我添加到 package.json 中的 lodash 服务器版本的测试失败
我将两个版本命名为间隔:
//package.json
"lodash": "3.10.1"
"lodashServer": "npm:lodash@^4.17.0"
这非常有效。代码按预期构建,测试通过,但问题是没有什么好方法可以防止开发人员在客户端使用较新版本,所以我想也许我可以配置 Jest 将代码库拆分为 projects
并对服务器文件夹和客户端文件夹运行一组不同的规则。
在文档中我找到了 modulePathIgnorePatterns
并且根据文档,匹配的文件不应该是必需的:
一个正则表达式模式字符串数组,在这些路径被认为对模块加载器“可见”之前与所有模块路径匹配。如果给定模块的路径与任何模式匹配,则它在测试环境中将不支持 require()
这是我的笑话配置:
"projects": [{
"displayName": "server",
"testMatch": ["<rootDir>/lib/**/*.test.js"]
...
},{
"displayName": "client",
"testMatch": ["<rootDir>/src/**/*.test.js"],
"modulePathIgnorePatterns":["<rootDir>/node_modules/lodashServer"]
...
}]
拆分按预期工作,但是在客户端测试中,我添加了 lodashServer
版本并且测试仍在通过。
关于我可能做错了什么或者是否有其他方法可以完成我正在尝试做的事情的任何想法?