当我尝试使用 Jest 29.7.0 运行测试时,它显示此错误:
Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
...
Details:
D:\<redacted>\node_modules\.pnpm\[email protected]\node_modules\uuid\dist\esm-browser\index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export { default as v1 } from './v1.js';
^^^^^^
SyntaxError: Unexpected token 'export'
> 1 | import { v4 as uuid } from 'uuid';
| ^
2 |
乍一看,这似乎与这篇文章中讨论的问题相同。然而,那篇文章是很多年前的文章了,结论似乎是“等到 Jest 支持包导出。”
Jest 现在似乎支持 ESModules,我收到的错误甚至引用了有关它的说明页面。我相信我已按照该页面上的说明进行操作,但我仍然看到此错误。
--experimental-vm-modules
标志执行节点,就像我运行 jest 时所说的那样:node --experimental-vm-modules D:\<redacted>\node_modules\jest\bin\jest.js sample.test.ts
我认为我不需要做任何其他事情(即我没有使用
extensionsToTreatAsEsm
选项,因为相关文件(来自 uuid 的 index.js)具有标准扩展名。)
我是否忽略了什么?我相信我已经在 Jest 中启用了 ESM 支持,但它似乎仍然不喜欢我对 uuid 包的使用。
我认为这正是原因
Jest ships with experimental support for ECMAScript Modules (ESM).
错误的原因是因为uuid包的package.json没有字段
"type": "module"
。 (尝试手动修改node_modules中的该文件,错误应该消失)
Jest 将包定义为 ESM 模块,它具有 .mjs 扩展名,或者如果扩展名是 .js,package.json 应该有一个字段
"type": "module"
。
如果 uuid 包扩展名是 .js 并且 package.json 中没有 type 字段,那么 Jest 尝试将其解析为普通 js 模块,并由于导出关键字而遇到语法错误。
如果你真的坚持在 Jest 中使用 ESM,那么你可能可以使用 jest.config 中的 moduleNameMapper 来从 导入 uuid ode_modules\uuid\dis