React Native中Detox运行TypeScript测试时出现import模块语法错误
React Native Detox TypeScript测试报错:Cannot use import statement outside a module
运行Detox TypeScript测试时出现如下语法错误:
SyntaxError: Cannot use import statement outside a module Details: import { NativeModules } from 'react-native'; ^^^^^^ SyntaxError: Cannot use import statement outside a module 1 | import axios, { AxiosInstance } from 'axios'; 2 | import { isEmpty } from 'lodash'; > 3 | import VersionNumber from 'react-native-version-number'; ^^^^^^
错误源于测试文件导入的类,该类依赖了其他模块;若测试文件无import语句,则可正常运行。
已花费数小时调整jest.config.js但未解决问题。查资料得知需用Babel将ES6代码及import语句转译为CommonJS后,再交由Detox/Jest处理,但因配置选项繁多,不清楚具体操作方式。
当前配置文件
jest.config.js
/* eslint-disable @typescript-eslint/no-var-requires */ const { pathsToModuleNameMapper } = require('ts-jest'); const { compilerOptions } = require('../tsconfig.json'); /** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { rootDir: '..', testMatch: ['<rootDir>/e2e/**/*.test.ts'], testTimeout: 120000, maxWorkers: 1, globalSetup: 'detox/runners/jest/globalSetup', globalTeardown: 'detox/runners/jest/globalTeardown', reporters: ['detox/runners/jest/reporter'], testEnvironment: 'detox/runners/jest/testEnvironment', verbose: true, preset: 'ts-jest', moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' }), };
babel.config.js
module.exports = { presets: [ 'module:metro-react-native-babel-preset', '@babel/preset-typescript', ['@babel/preset-env', { targets: { node: 'current' } }], '@babel/plugin-transform-modules-commonjs', ], plugins: [ [ 'module-resolver', { root: ['./src'], extensions: ['.ios.js', '.android.js', '.js', '.ts', '.tsx', '.json'], alias: { '@app': './src', '@assets': './assets', }, }, ], ['module:react-native-dotenv', { envName: 'DOTENV', moduleName: '@env' }], ], env: { production: { plugins: ['transform-remove-console'], }, }, };
.detoxrc.js(仅相关代码)
/** @type {Detox.DetoxConfig} */ module.exports = { testRunner: { args: { $0: 'jest', config: 'e2e/jest.config.js', }, jest: { setupTimeout: 120000, }, }, apps: {...}, devices: {...}, configurations: {...}, };
已尝试的资料
已查阅并尝试以下资料中的方案,但未解决问题:
- 《How to resolve "Cannot use import statement outside a module" from Jest when running tests?》
- Detox仓库中关于"Cannot use import statement outside a module"的相关issue
- Jest官方文档中ECMAScript Modules章节
内容的提问来源于stack exchange,提问作者Yuniac
相关产品推荐
相关产品推荐

