当我try 使用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\uuid@8.3.2\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 |

乍一看,这和seem上讨论的问题是一样的.然而,这篇文章出自多年前,结论似乎是"等到Jest支持包导出".

Jest现在似乎支持ESModules,我得到的错误甚至引用了关于它的instructional page.我相信我已经按照该页上的说明进行了操作,但我仍然看到这个错误.

  1. 我做了not个页面上的#1(禁用代码转换),因为uuid包来self 的node_modules目录,错误消息本身说'默认情况下,"node_modules"文件夹被transformers忽略.考虑到它会被自动忽略,我认为我不需要禁用任何额外的代码转换
  2. 运行jest时,我使用--experimental-vm-modules标志执行了node:
node --experimental-vm-modules D:\<redacted>\node_modules\jest\bin\jest.js sample.test.ts

我认为我不需要做任何其他事情(即,我没有使用extensionsToTreatAsEsm选项,因为有问题的文件(来自UUID的index.js)具有标准扩展名.)

我是不是忽略了什么?我相信我已经在Jest中启用了ESM支持,但它似乎仍然不喜欢我使用UUID包.

推荐答案

是的,您已经在Jest中启用了ESM支持.

错误的原因是因为uuid包的Package.json没有字段"type": "module".(try 在NODE_MODULES中手动修改该文件并添加类型字段.错误应该消失)

JEST在实验标志下将包定义为ESM模块,其路径扩展名为.mjs,如果扩展名为.js,则Package.json应具有字段"type": "module".

In case of uuid package path extension is .js and there is not field "type":"module" in its package.json,,因此Jesttry 将其解析为CommonJS模块,但由于关键字EXPORT而遇到语法错误.

如果你真的坚持在Jest中使用ESM,那么你可能会在jest.config中使用moduleNameMapper来从\node_modules\uuid\dist\commonjs-browser\index.js\node_modules\uuid\dist\index.js导入uuid(而不是Jest当前使用的node_modules\uuid\dist\esm-browser\index.js).

也来看看这里-https://github.com/uuidjs/uuid/issues/678

Node.js相关问答推荐

MongoDB:更新批量操作中许多不能正常工作的内容

(0,core_1.default)不是使用@middy/core的lambda处理程序上的函数

使用Node.js中的";类型";:";模块";不导入文件

如何从shell脚本中计算ecmascript模块?

在 azure blob 容器之间复制文件

如何修复node.js中的错误代码无法加载资源:服务器响应状态为403(禁止)

我如何在 Raku 的供应中注册不同的事件?

当我使用 uuid 代码意外崩溃,然后工作正常?

Chrome 浏览器未将 if-modified-since 标头发送到服务器

容器之间的 Docker HTTP 请求

将 myproject/.npmrc 与注册表一起使用

在 Node.js 与 Cron 作业(job)中设置间隔?

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

如何在 Node.js 中等待子进程完成

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

如何使用 Node.js 在服务器端管理多个 JS 文件

Express.js:没有这样的文件或目录

Puppeteer 等待所有图像加载然后截图

FireStore 如果不存在则创建一个文档

node/nodemon 中是否有对 typescript 的源映射支持?