当前位置: 首页 > 知识库问答 >
问题:

React Native/Expo又一个语法错误:测试时意外导入令牌

姜嘉赐
2023-03-14

我正在使用React Native和Expo开发一个移动应用程序。

一切都很顺利,应用程序运行如期。

但在导入一些@expo库时,我的测试没有运行。

错误是经典的:SynTaxError:意外的令牌导入

给出erro的完整背景:

({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import glyphMap
                                                                                         ^^^^^^
SyntaxError: Unexpected token import

在google上搜索一个解决方案,我大部分时间都会得到与这里提到的类似的结果。

所以我在package.json

  "jest": {
    "transformIgnorePatterns": [ 
      "/!node_modules\\/@expo"
    ],
    "preset": "react-native"
  }

我还尝试将模块名称更改为:

  1. /!node_modules\/expo
  2. /!node_modules\/expo/矢量图标
  3. /node_modules/@expo/矢量图标

我还按照另一个答案添加了. babelrc,内容如下:

{
  "presets": ["babel-preset-expo", "react-native"],
  "env": {
    "test": {
      "plugins": [
        "babel-plugin-dynamic-import-node"
      ]
    }
  }
}

不幸的是,这些解决方案都不适合我。

为了提供更多上下文,它是一个带有Expo的React Native应用程序,在OSX上运行,除了上面的错误之外,我还会收到另外5个警告。警告是关于重复的模块名称(可能不相关,但无论如何):

jest-haste-map: duplicate manual mock found:
  Module name: ErrorUtils
  Duplicate Mock path: /<project_dir>/node_modules/react-native/Libraries/Core/__mocks__/ErrorUtils.js
This warning is caused by two manual mock files with the same file name.
Jest will use the mock file found in:
/<project_dir>/node_modules/react-native/Libraries/Core/__mocks__/ErrorUtils.js
 Please delete one of the following two files:
 /<project_dir>/node_modules/react-native/node_modules/fbjs/lib/__mocks__/ErrorUtils.js
/project_dir/node_modules/react-native/Libraries/Core/__mocks__/ErrorUtils.js


jest-haste-map: @providesModule naming collision:
  Duplicate module name: camelcase
  Paths: /<project_dir>/node_modules/react-native/node_modules/yargs-parser/node_modules/camelcase/package.json collides with /<project_dir>/node_modules/react-native/node_modules/yargs/node_modules/camelcase/package.json

This warning is caused by a @providesModule declaration with the same name across two different files.
jest-haste-map: @providesModule naming collision:
  Duplicate module name: bser
  Paths: /<project_dir>/node_modules/react-native/node_modules/bser/package.json collides with /<project_dir>/node_modules/react-native/node_modules/fb-watchman/node_modules/bser/package.json

This warning is caused by a @providesModule declaration with the same name across two different files.
jest-haste-map: @providesModule naming collision:
  Duplicate module name: core-js
  Paths: /<project_dir>/node_modules/react-native/node_modules/core-js/package.json collides with /<project_dir>/node_modules/react-native/node_modules/fbjs/node_modules/core-js/package.json

This warning is caused by a @providesModule declaration with the same name across two different files.
jest-haste-map: @providesModule naming collision:
  Duplicate module name: yargs
  Paths: /<project_dir>/node_modules/react-native/node_modules/yargs/package.json collides with /<project_dir>/node_modules/react-native/node_modules/uglify-js/node_modules/yargs/package.json

This warning is caused by a @providesModule declaration with the same name across two different files.

版本:react native:0.46.1@expo/vector icons:5.1.0 jest:20.0.4

还有其他想法吗?

****更新****

将transformIgnorePatterns更改为“/!node_modules\/\@expo”不会使其正常工作,但至少会更改为另一个错误。

Invariant Violation: Native module cannot be null.

  at invariant (node_modules/react-native/node_modules/fbjs/lib/invariant.js:44:7)
  at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:31:1)
  at Object.<anonymous> (node_modules/expo/src/Location.js:6:26)
  at Object.<anonymous> (node_modules/expo/src/Expo.js:8:1)

共有1个答案

夏侯枫
2023-03-14

我也遇到了同样的问题。我最终通过删除和重新安装jest-expo来解决它。确保您的jest-expo版本与您的Expo版本相匹配。

npm卸载jest-expo npm缓存清理#或npm缓存验证(如果节点5)npm安装--save-dev jest-expo

 类似资料:
  • 问题内容: 我的项目中已经实现了其他相关问题中提供的解决方案,例如在.babelrc中包含正确的预设(es2015)。 我有两个项目(分别称为A和B),它们都使用ES6模块语法。在项目A中,我导入了通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,出现错误: SyntaxError:意外的令牌导入 在此之前,项目B声称存在以下错误代码行: (函数(导出

  • 在其他相关问题中提供的解决方案,例如在中包括适当的预设(es2015)。babelrc已在我的项目中实现。 我有两个项目(我们称它们为A和B),它们都使用ES6模块语法。在项目A中,我正在导入通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,我得到了错误: SyntaxError:意外的令牌导入 前面是项目B中的这一错误代码行: (函数(导出、要求、模

  • 应用程序。js公司 在执行上述代码时,我得到以下错误。 当我将鼠标悬停在线上方时,会出现这个错误 在我的VS代码中。 当我使用node运行代码时,即在上。我在终端中收到以下错误: 我做错了什么?我希望最后的obj的值是{1:,2:,3:}

  • 在My Gulpfile.js错误部分: 我的包裹。json: 我运行并得到以下错误。 在终端屏幕中: gulp.task('webpack',gulp.series(async()=

  • 问题内容: 我不明白怎么了。我在其他论坛上讨论了翻译和通天塔。我需要做什么? 我的代码: 和错误 问题答案: ES6导入是最近引入的功能,并且Node的当前稳定版本尚不支持它们。Node.js问题跟踪器对此存在一个未解决的问题 -但在V8和Node添加对此功能的支持之前,您将需要使用编译器(最受欢迎的是babel)才能使用导入。 为了快速尝试转译,babel提供了基于Web的REPL。这段演示了您

  • 问题内容: 我键入的代码与《 Linux命令行:完整介绍》 (第369页)相同,但提示错误: 代码是这样的: 我想了解是什么导致了错误?如何修改代码?我的系统是Ubuntu。 问题答案: 和之间必须有一个空格,如下所示: 这些(及其组合)也都是 不正确的 : 另一方面,这些都可以: 顺便说一句,这些是等效的: 这些也等效: 而且,您的脚本的中间部分应该像这样更好: (我也将引号中的引号删除了,因为