即使在 Jest 中启用 ESModule 支持后,由于 uuid,Jest 也无法解析测试

问题描述 投票:0回答:1

当我尝试使用 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,我收到的错误甚至引用了有关它的说明页面。我相信我已按照该页面上的说明进行操作,但我仍然看到此错误。

  1. 我在页面上做了not做#1(禁用代码转换),因为uuid包来自我的node_modules目录,并且错误消息本身显示“默认情况下“node_modules”文件夹被变压器忽略。”鉴于它会被自动忽略,我认为我不需要禁用任何额外的代码转换
  2. 我使用
    --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 包的使用。

node.js jestjs node-uuid
1个回答
0
投票

我认为这正是原因

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

© www.soinside.com 2019 - 2024. All rights reserved.