2016-07-03 107 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配置,部署腳本等東西,如果有一些重複,我認爲這不是太糟糕,因爲通常存在細微的差異,而且這樣的東西往往不會有太大的改變。看起來像一個單一的回購將解決一些這些問題,但這不是我有任何經驗。 –