在create react app Reactjs应用程序中使用通用的sdk模块共享代码库

时间:2018-07-20 22:58:57

标签: reactjs react-native babel create-react-app monorepo

我想启动一个同时具有网络和响应界面的新应用。

我决定将所有与业务相关的代码(与环境无关)移入第三个程序包(又称为sdk),我可以在react和react native之间共享它们。

所以我的项目现在有4个模块

  1. Web-使用cra创建的
  2. SDK-主要是redux + redux saga + react容器+ Hoc's
  3. 移动式原生广告
  4. 服务器-nodejs Express API。

    • 所有网络,移动设备和服务器都将依赖于sdk模块。
    • sdk模块将依赖于服务器模块-主要依赖于虚拟模拟和数据接口。

有没有实现这种结构的标准方法?

我大概很想

  • 使用yarn工作区将所有节点模块提升到一个文件夹中,以避免在每个项目中重新安装软件包
  • 我将同时在所有4个项目中工作,所以我需要hotreload来了解这一点。

**面临的挑战**

  1. Cra不会在src文件夹之外转送代码,因此尽管Web项目确实刷新了我在sdk上所做的更改。它无法理解es6代码。
  2. Jest也不了解来自node_modules的es6

在同时处理sdk和Web模块时如何避免重新构建步骤?

2 个答案:

答案 0 :(得分:4)

Yarn workspace听起来像是您正在考虑的项目结构的好方法。

您可以拥有一个db.collection.aggregate([ {$group : { _id : { mart_code : '$mart_code', director : '$director', category : '$category' }, money: {$sum : '$money'} }}, {$group : { _id : '$_id.mart_code', directorList : {$push : { director: "$_id.director", money: '$money' }}, categoryList : {$push : { category: "$_id.category", money: '$money' }} }}, {$group : { _id : null, martList : {$push : { mart_code : '$_id', directorList : '$directorList', categoryList : '$categoryList' }} }}, {$project : { _id : 0, martList : '$martList' }} ]) 目录,您可以在其中添加项目:

packages

现在,您可以使用/packages - web - sdk - native 使用babel来监视每个程序包的代码更改,yarn工作区将负责将它们链接在一起。

如果babel监视程序正在运行,则您对sdk所做的任何更改都将同时反映到babel -wweb软件包中。您也可以使用concurrently之类的东西将所有这些结合在一起,以使用单个命令来激发观察者。

我与他人合着了一个开源库,我们在其中遵循类似的结构,您可以检查here。该项目的不同之处在于我们的redux逻辑位于单独的存储库中。

为了使笑话生效,您可以在native文件中添加一个test env,该文件会转换模块。因此,您可以添加两个不同的环境,例如.babelrc(可转换为commonjs模块)和test环境(可保留ES模块),以便您的用户可以利用摇树的优势。 Example config

希望这为您提供了一个很好的起点:)

答案 1 :(得分:-1)

您可以尝试这样的Project结构:

| package.json
|- node_modules
|- Web
 | package.json
|- SDK
 | package.json
|- Mobile
 | package.json
|- Server
 | package.json

然后,您可以将所有内容安装在根文件夹中并设置NODE_PATH env变量:

export NODE_PATH='yourdir'/node_modules