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

React Native中pod install如何忽略链接库内部的node_modules

React Native 本地开发UI库链接后example依赖泄露问题解决方案

问题背景

我正在开发一款内部UI库,使用react-native-builder-bob运行很顺畅,我可以在example文件夹对应的示例应用中测试组件,专注于库的开发。
但当我将该库链接到my-app时(执行yarn link && cd ../my-app/ && yarn link my-lib),再运行pod install(cd ios && pod install),示例应用的依赖会被引入到my-app的podfile.lock中,如下所示:

EXSplashScreen:
  :path: "../node_modules/my-library/example/node_modules/expo-splash-screen/ios"

我不接受这类依赖成为项目的直接依赖,更无法接受它导致应用启动崩溃(我的应用并未使用expo,也没有调用任何expo相关能力。
请问我要如何同时在example项目和my-app中正常开发测试,且两者不会互相干扰?

已了解的备选方案

  • 开发my-app时删除example的node_modules:但我不想采用该方案。
  • 使用yarn pack打包库,解压tar包后再链接(打包产物不会包含example文件夹):但该方案操作比较繁琐。
  • 修改Podfile对应的RN脚本忽略example文件夹:但我不知道具体实现方式,也不确定该方案是否适配安卓端。

补充说明:引入子文件夹依赖的是react-native-unimodules的cocoapods.rb脚本,它会拉取所有包含unimodules.json的包。


可落地的解决方案

方案1:修改依赖查找逻辑(双端适配,不需要更换链接方式)

iOS端处理

在my-app的ios/Podfile中,调用use_unimodules!或use_native_modules!之前,添加如下代码过滤example路径的依赖:

# 过滤example路径下的所有依赖
require 'json'
module Unimodules
  class PodspecFinder
    original_method = instance_method(:podspecs)
    define_method(:podspecs) do
      original_method.bind(self).call.reject { |podspec|
        podspec[:path].include?('/example/') || podspec[:path].include?('\\example\\')
      }
    end
  end
end

如果是使用RN官方原生依赖查找逻辑,同理重写NativeModules::PackageMatcher的对应方法过滤example路径即可。

安卓端处理

在UI库根目录新建/修改react-native.config.js,添加如下配置忽略example下的所有依赖:

const exampleDeps = require('./example/package.json').dependencies || {}
module.exports = {
  dependencies: Object.keys(exampleDeps).reduce((acc, dep) => {
    acc[dep] = {
      platforms: {
        android: null,
        ios: null,
      },
    }
    return acc
  }, {}),
  assets: [],
}

方案2:使用yalc替代yarn link(更简单,无需修改配置)

yalc会模拟真实的npm包发布安装逻辑,自动遵循库的.npmignore或package.json中files字段的配置,不会引入example文件夹内容。
操作步骤:

  1. 全局安装yalc:npm i yalc -g
  2. 在UI库的package.json中添加files字段,仅声明需要发布的文件,示例:"files": ["src", "lib", "ios", "android", "package.json"]
  3. UI库根目录执行yalc publish
  4. 在my-app根目录执行yalc add my-lib完成链接
    后续修改UI库代码后,执行yalc push即可自动同步变更到my-app,不会引入example的任何依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:06:04