Javascript Jest阻止导入节点模块

Javascript Jest阻止导入节点模块,javascript,jestjs,Javascript,Jestjs,我正在尝试配置jest以防止导入模块 我正在处理的代码库在同一个包中有服务器端代码和客户端代码,并且在所有面向客户端的代码上都有lodash的外部Web包依赖项。Lodash从CDN加载,以帮助站点性能。但是,为客户机代码提供服务的服务器可以使用开发人员想要使用的任何版本,因为没有性能优势。当开发人员不可避免地使用在lodash的客户端版本中不可用的函数时,这有客户端代码中断的缺点 最好的解决方案是将包版本转换为CDN上可用的版本,但此时修复太复杂和耗时 基本上,我正在尝试使用Jest进行失败测

我正在尝试配置jest以防止导入模块

我正在处理的代码库在同一个包中有服务器端代码和客户端代码,并且在所有面向客户端的代码上都有lodash的外部Web包依赖项。Lodash从CDN加载,以帮助站点性能。但是,为客户机代码提供服务的服务器可以使用开发人员想要使用的任何版本,因为没有性能优势。当开发人员不可避免地使用在lodash的客户端版本中不可用的函数时,这有客户端代码中断的缺点

最好的解决方案是将包版本转换为CDN上可用的版本,但此时修复太复杂和耗时

基本上,我正在尝试使用Jest进行失败测试,这些测试试图使用我添加到package.json中的lodash服务器版本

我为两个版本命名:

//package.json
"lodash": "3.10.1"
"lodashServer": "npm:lodash@^4.17.0"
这真是太棒了。代码按预期生成,测试通过,但问题是没有一个好方法阻止开发人员在客户端使用较新版本,因此我想也许我可以配置Jest将代码库拆分为项目,并在服务器文件夹和客户端文件夹上运行一组不同的规则

我在文档中找到了
modulePathIgnorePatterns
,根据文档,不需要匹配的文件:

在模块加载器认为所有模块路径“可见”之前,与这些路径匹配的regexp模式字符串数组。如果给定模块的路径与任何模式匹配,则在测试环境中它将不需要()

以下是我的笑话配置:

"projects": [{
  "displayName": "server",
  "testMatch": ["<rootDir>/lib/**/*.test.js"]
...
},{
  "displayName": "client",
  "testMatch": ["<rootDir>/src/**/*.test.js"],
  "modulePathIgnorePatterns":["<rootDir>/node_modules/lodashServer"]
...
}]
“项目”:[{
“显示名称”:“服务器”,
“testMatch”:[“/lib/***.test.js”]
...
},{
“displayName”:“客户端”,
“testMatch”:[“/src/***.test.js”],
“modulePathIgnorePatterns”:[“/node\u modules/lodashServer”]
...
}]
拆分工作正常,但是在客户端测试中,我添加了
lodashServer
版本,测试仍然通过

关于我可能做错了什么,或者是否有其他方法可以完成我试图做的事情,有什么想法吗