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

开发适配Node.js/React/React Native的TypeScript包遇依赖问题求助

跨Node.js/React/React Native的TypeScript包兼容问题

包背景

我正在开发一款可通过npm install直接安装的TypeScript包,适配Node.js、React和React Native(RN)环境。包的核心功能可在纯JS环境正常运行,同时包含React/RN专属模块——比如React项目可从/react目录导入专属hooks。

代码分离实现方式

我通过两种方式实现平台代码分离:

  • 动态导入:仅在特定配置开启时加载对应平台模块,示例代码:
private async _setupRN(config: PackageConfig) {
  const { subscribeForAppStateChanges } = await import("./rn");
  // ...其他业务逻辑
};

if (config?.enableReactNative) {
  this._setupRN(config);
}
  • 用户手动导入:比如React专属hooks,用户未导入则该模块不会被使用或打包

遇到的问题

  1. 本地复制包文件:直接将包文件夹复制到ts-node/React/RN项目中,所有功能(包括平台专属功能)均可正常运行
  2. 发布原.ts文件到npm:安装后仅RN环境正常,React环境会抛出类型定义或导入/导出语句错误
  3. 编译为.js后发布:Node.js和RN环境正常,但React环境报错:
Module not found: Error: Can't resolve 'react-native' in '.../node_modules/@appklaar/appklaar_sdk/rn'

更诡异的是:即使完全移除所有导入react-native的代码(相关代码绝不会被执行),仍会出现上述错误,似乎React会解析未使用的文件

当前配置与疑问

  • react和react-native已设为包的peerDependencies,但因仅设peerDependencies时无法构建,临时将RN设为devDependency
  • 疑问:为何Node.js环境正常,只有React环境出现模块解析错误?
  • 诉求:可接受发布前执行tsc --build,希望实现单包跨环境兼容,不想拆分为三个独立包,确信已接近解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:53:31