Jest 使用 react + konva 和/或 react-konva 遇到了意外的令牌

Posted

技术标签:

【中文标题】Jest 使用 react + konva 和/或 react-konva 遇到了意外的令牌【英文标题】:Jest encountered an unexpected token with react + konva and/or react-konva 【发布时间】:2021-08-27 08:18:38 【问题描述】:

安装和导入 Konva 和 react-konva 后,我的 jest@enzyme 测试无法运行并出现此错误:

● 测试套件无法运行

Jest encountered an unexpected token

This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain javascript.

By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

详情:

C:\avius\fortest\node_modules\konva\lib\Core.js:1
("Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest)export  Konva  from './_CoreInternals.js';
                                                                                         ^^^^^^

SyntaxError: Unexpected token 'export'

  at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1350:14)
  at Object.<anonymous> (node_modules/react-konva/lib/ReactKonvaCore.js:19:13)

它是一个新创建的 create-react-app 用于测试这个错误,所以它没有什么特别之处。 我没有 babel.rc,也没有 babel.config.js 或 jest.config.js 文件。 (因为我尝试了很多设置,都不行。)

我可以导入和使用其他 es6 模块,如 nanoid、lodash 等,所以 konva 似乎需要一些特别的东西?卸载 konva,一切正常。

【问题讨论】:

我遇到了同样的问题,我不得不再次运行npm install konva canvas,它解决了我的问题 您找到解决方案了吗? 你是用 yarn 还是 npm 安装的? 【参考方案1】:

为了让它发挥作用,我做了以下工作:

我创建了一个包含以下内容的 .babelrc:


    "presets": [
        "@babel/preset-react"
    ],
    "plugins": [
        "@babel/plugin-transform-modules-commonjs"
    ]

这可确保文件格式正确。 您还必须安装这些软件包。

然后我将以下内容放入我的 package.json 文件中:

"jest": 
    "testEnvironment":"jsdom",
    "moduleNameMapper": 
    "^konva": "konva/konva"
    

为了更好地衡量,我重新安装了我所有的 react-konva 文件(尽管这应该没有什么不同)。

额外: 如果您遇到关于未定义某些变量的问题,请确保您已安装 konvacanvas

【讨论】:

另外,如果您遇到Cannot read property 'autoDrawEnabled' of undefined,则存在问题:github.com/konvajs/react-konva/issues/630【参考方案2】:

这发生在我从 react 16 升级到 17 时。这个建议对我有用 https://www.gitmemory.com/issue/konvajs/konva/1168/921810056

package.json

"jest": 
    "moduleNameMapper": 
      "^konva": "konva/konva"
    

【讨论】:

以上是关于Jest 使用 react + konva 和/或 react-konva 遇到了意外的令牌的主要内容,如果未能解决你的问题,请参考以下文章

在 react-konva 中更改 Hover 上的光标

如何在 react-konva 中捕获视频的第一帧

React-konva 用加权箭头连接两个节点

React-konva 带箭头的双连接对象

为啥我无法在我的 React 应用程序中访问 Konva Canvas 属性?

将画布从 React Konva 导出为 SVG 和 PDF?