2016-07-03 76 views
4

背景:我公司的网络应用程序实际上是几个完全分离的应用程序,相互影响最小。这就是为什么把它们放在单个项目下没有任何意义 - 所以我使用了单独的项目。然而,自从我开始迁移和在ReactJS(使用的WebPack捆绑),我找到了重复使用很多机会编写新的应用程序,以避免重复代码,并避免其他应用程式,再下载公共资源已经获取他们:您如何管理多个ReactJS项目?

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

或者,也许,毕竟,我应该去一个monorepo?如何?

回答

2

您可以创建一个单独的项目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这样的东西来孤立地创建这些组件。您可以发布一个主包与所有包,单个组件作为包,或者介于两者之间(例如,一个包中的所有表单组件)。无论哪种方式,他们仍然可以共享一个回购为了方便。

+0

谢谢,你使用这种方法?你对开发模式做什么?你有没有考虑去monorepo?有更具体的项目结构和npm脚本实现这些目标的例子吗? –

+1

在工作中,我们专门为React组件使用它;我们没有各种各样的项目来保证分享其他资产。对于像webpack配置,部署脚本等东西,如果有一些重复,我认为这不是太糟糕,因为通常存在细微的差异,而且这样的东西往往不会有太大的改变。看起来像一个单一的回购将解决一些这些问题,但这不是我有任何经验。 –