在React Native中的两个应用程序共享代码

在React Native中的两个应用程序共享代码

问题描述:

我有两个应用程序实际上共享相同的代码库(在src文件夹内),除了一些配置。当前文件夹结构看起来像这样:在React Native中的两个应用程序共享代码

├── app1 
│   ├── android 
│   ├── index.android.js 
│   ├── index.ios.js 
│   ├── ios 
│   ├── node_modules 
│   ├── package.json 
│   └── src 
└── app2 
    ├── android 
    ├── index.android.js 
    ├── index.ios.js 
    ├── ios 
    ├── node_modules 
    ├── package.json 
    └── src 

内部index.android.jsindex.ios.js我从与例如在src /文件夹要求模块import MainView from './src/mainView';

这样我必须在两个不同的位置维护相同的代码库,这当然不是理想的。 这就是为什么我想有一个类似的文件夹结构:

├── app1 
│   ├── android 
│   ├── index.android.js 
│   ├── index.ios.js 
│   ├── ios 
│   ├── node_modules 
│   └── package.json 
├── app2 
│   ├── android 
│   ├── index.android.js 
│   ├── index.ios.js 
│   ├── ios 
│   ├── node_modules 
│   └── package.json 
└── src 

不幸的是,需要调用不具有这种结构正确解析路径。 当我使用import MainView from '../src/MainView'出现以下错误信息:

error

是否有另一种方式来实现我想要什么?

我试图解决同样的问题。

一个可能的解决方案是将每个应用程序目录中的符号链接用于外部src目录。我还没有测试过。

+0

挖得更深一点,我相信这可以用'npm link'来实现。看看这篇文章:http://justjs.com/posts/npm-link-developing-your-own-npm-modules-without-tears – Arrkaye

+0

我也这么想,但我认为这不可能与RN打包。请参阅我在答案中发布的讨论。 –

+0

你说得对,我无法得到这份工作。我所遇到的问题是我拿出的共享组件依赖于RN/React,并且当我将它安装在原始项目中时,打包者抱怨冲突(RN被加载两次)。这一次在这里输了。 – Arrkaye

关于this use case here已经有很多讨论。如果你想用watchman来运行打包程序,我不相信这是可能的。即使有最新版本的RN,人们仍然在报告问题。

根据您的使用情况,我的一个选项是为我们的应用程序之间的共享文件创建一个单独的npm repo,并将它作为依赖项添加到两者中(更改代码不会中断应用程序已经使用它)。从整个版本角度来看,它也有所帮助。这可能是一个私人的GitHub回购(我们使用的),因为您可以使用GH repos for dependencies

+1

如果包和主项目都对RN有依赖关系,是否有可能使其工作?我在打包程序中遇到了关于尝试注册相同组件的错误。 – Arrkaye