You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React Native/Expo中配置Vitest时遇到Rollup解析错误:Expected 'from', got 'typeof'

在React Native/Expo中配置Vitest时遇到Rollup解析错误:Expected 'from', got 'typeof'

看起来你碰到的是Vitest底层的Rollup没法识别React Native里遗留的Flow类型语法问题——那些import typeof是Flow特有的写法,Rollup默认不支持这种语法,所以才会抛出解析错误。下面给你几个实用的解决步骤:

1. 用@rollup/plugin-flow处理Flow语法

首先得给Rollup加个能解析Flow语法的插件,把那些特殊的import typeof转换成常规代码:

  • 先安装依赖:
npm install --save-dev @rollup/plugin-flow
  • 然后修改你的vite.config.mts,把这个插件加到配置里:
import { defineConfig } from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
import flow from '@rollup/plugin-flow';

export default defineConfig({
  plugins: [
    // 要先处理Flow语法,再执行其他插件
    flow({ all: true }),
    tsconfigPaths()
  ],
});

2. 配置Vitest的React Native测试环境(推荐)

因为你是在Expo项目里跑Vitest,直接用原生模块可能会有更多环境适配问题,建议引入专门的React Native测试插件:

  • 安装依赖:
npm install --save-dev @vitest/react-native
  • 更新vite.config.mts的测试配置:
import { defineConfig } from 'vite';
import tsconfigPaths from 'vite-tsconfig-paths';
import flow from '@rollup/plugin-flow';
import reactNative from '@vitest/react-native';

export default defineConfig({
  plugins: [
    flow({ all: true }),
    tsconfigPaths(),
    reactNative()
  ],
  test: {
    environment: 'react-native',
  },
});

3. 优化你的测试代码(可选)

如果不想依赖原生模块的真实实现,也可以手动模拟expo-linking的方法,让测试更轻量化:

import { describe, test, expect, vi } from 'vitest';
import * as Linking from 'expo-linking';

// 手动模拟parse方法的返回值
vi.spyOn(Linking, 'parse').mockReturnValue({
  hostname: null,
  path: '/path',
  queryParams: {}
});

describe('deep-link-redirection', () => {
  test('deep-link', () => {
    const result = Linking.parse('scheme://path');
    expect(result.path).toBe('/path');
  });
});

补充说明

React Native的核心模块里大量使用Flow的import typeof来声明类型,但Vite默认的Rollup配置没有处理这种语法,所以必须通过@rollup/plugin-flow做转换。而@vitest/react-native能帮你模拟React Native的运行环境,减少后续可能出现的其他兼容问题。

备注:内容来源于stack exchange,提问作者Zorayr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:43:06