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

如何在不修改node_modules的前提下为TS版React Native项目接入NATS.io

无需修改node_modules的NATS接入方式完全可以实现,当前报错是因为nats依赖的Node.js核心模块util在React Native原生环境中不存在,按以下步骤配置即可解决:

1. 安装依赖包

安装缺失的polyfill以及环境兼容包:

yarn add util react-native-get-random-values text-encoding nats.ws
2. 入口文件预注入全局API

在项目入口文件(通常是index.js或App.tsx)的最顶部添加以下代码,提前全局挂载nats需要的API:

// 必须放在所有其他import语句之前
import 'react-native-get-random-values';
import { TextEncoder, TextDecoder } from 'text-encoding';
import util from 'util';

(global as any).util = util;
(global as any).TextEncoder = TextEncoder;
(global as any).TextDecoder = TextDecoder;
3. 配置Metro模块解析规则

修改项目根目录下的metro.config.js,添加Node核心模块的polyfill映射:

const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');

const config = {
  resolver: {
    extraNodeModules: {
      util: require.resolve('util'),
      // 后续如果出现其他Node核心模块(如buffer、stream)缺失报错,可在此处添加对应polyfill的映射
    },
  },
};

module.exports = mergeConfig(getDefaultConfig(__dirname), config);
4. 正确导入NATS

业务代码中导入NATS时,必须使用WebSocket适配版本,避免触发Node端专属的fs、net等模块依赖:

// 错误写法:加载Node端实现,会触发fs等模块缺失报错
// import * as nats from 'nats'

// 正确写法:加载WebSocket适配版本,原生兼容React Native环境
import * as nats from 'nats.ws'
5. 清理缓存重启项目

执行以下命令清理所有缓存后重启服务,避免旧缓存导致配置不生效:

watchman watch-del-all && rm -rf /tmp/metro-* && yarn start --reset-cache

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:51:03