你如何管理几个ReactJS项目?

时间:2016-07-03 11:07:52

标签: reactjs webpack

背景:我公司的网络应用程序实际上是几个完全分离的应用程序,彼此影响很小。这就是为什么将它们保存在单个项目中没有任何意义的原因 - 所以我使用了单独的项目。但是,自从我开始在ReactJS中迁移和编写新应用程序(使用Webpack进行捆绑)后,我发现了许多重用机会,以避免代码重复,并避免在另一个应用程序已经获取后再次下载公共资源:

  • 我使用特定版本的第三方npm模块 - 所以没有理由一遍又一遍地捆绑它们 - 没有理由将它们多次上传到服务器(对于所有项目)。
    • 如何跨项目共享package.json修复版本?
    • 您是将所有/组的npm模块捆绑在一起还是分别捆绑在一起?我希望从服务器获取内部部署的所有内容。
    • 如果您决定更新其中一个节点模块,请采取哪些措施来确保不要重新捆绑节点模块?
  • 类似的问题适用于字体文件(将字体保留在服务器上,另一种字体用于图标)
  • 常见样式表
  • 常见的JS代码 - 就像utils&通用
  • 常见的web.config配置
  • 常见图像(目前其中一些图像是内联在不同的包中)
  • 和最后 - 常见组件 - 您如何分享它们?你是否使用单独的项目并发布到npm?符号链接?

或许,毕竟,我应该选择monorepo?怎么样?

1 个答案:

答案 0 :(得分:3)

您可以创建一个单独的项目my_modules,它只是共享的公共包的清单。你有一个包含所有常用模块的package.json,还有一个index.js,它有类似的功能:

import React, { Component, PropTypes } from 'react';
import moment from 'moment';

export { React, Component, PropTypes, moment };

然后,您将这个新的my_modules项目发布到github,并在其他项目中安装

import { React, Component, PropTypes } from 'my-modules';

每次更改软件包时,都会增加版本,然后在项目中更新该版本(这仍然有点痛苦,但你可以使用像greenkeeper.io这样的东西来确保它们没有变得过时了。

同样地,你可以为你提到的其他事情做同样的事情,尽管你不想过分夸大它;您应该只共享不经常更改的标准资产,并将项目特定资产保留在自己的仓库中。

编辑:想要补充一点,对于React组件来说,这实际上是一种非常好的做法,因为它迫使你编写通用的独立组件。您可以使用React Storybook之类的东西来单独创建这些组件。您可以发布一个包含所有包的主包,单个组件作为包,或者介于两者之间的某个位置(例如,一个包中的所有Form组件)。无论哪种方式,他们仍然可以为了方便而共享回购。