簡體   English   中英

在部署之前或之后構建Web應用程序?

[英]Build web application before or after deployment?

上下文

  • Web應用程序項目有一個帶有前端文件的/build (或/dist )文件夾,在構建期間生成(由Gulp生成)。 此文件夾不在源代碼管理下(例如,參見: React.js Starter Kit
  • 服務器端代碼不需要捆綁或編譯步驟,因此項目中的/src文件夾可以按原樣部署(這些源文件用於運行Node.js或ASP.NET vNext服務器)
  • Web應用程序通過Git部署(參見HerokuWindows Azure中基於Git的部署選項)

問題

  1. 在部署之前或之后構建(捆綁和縮小)前端文件是否更好?
    • 如果之前,您可能最終擁有一個單獨的存儲庫(或分支),源控件下的/build文件夾與其余的項目文件一起。 此repo僅用於部署目的。
    • 如果之后,部署時間可能會增加 - 下載構建過程中使用的其他npm模塊所需的時間,服務器的CPU在構建過程中可能會高達100%,這可能會損害您的Web應用程序的響應能力。
  2. 在運行KuduSync命令之前或之后,在遠程服務器上構建前端文件是否更好?
  3. 如果使用Kudu將Web應用程序部署到Windows Azure,部署腳本是否應僅將/build文件夾的內容(包括.js,.html,.css等公共前端文件)復制到/wwwroot 與復制所有項目文件(服務器端源代碼和前端軟件包)相反,默認情況下它是這樣做的。
  4. 默認情況下,Azure的部署腳本將所有項目文件從D:\\home\\site\\repository文件夾復制到D:\\home\\site\\wwwroot文件夾,然后從那里啟動Node.js應用程序。 這是必要的一步嗎? 為什么不從D:\\home\\site\\repository文件夾啟動Node.js(或ASP.NET vNext)應用程序? 如果它確實應該被復制到一個單獨的文件夾,為什么源文件放在wwwroot ,也許最好將它們復制到wwwroot之外的另一個文件夾?

我不熟悉Azure和Heroku,因此我無法提供有關這些特定部署選項的任何想法。

我正在使用(4個專用服務器,其中2個僅用於提供靜態文件),構建捆綁和縮小的javascript文件(用於前端)並將所有這些文件添加到主存儲庫的選項有幾個優點

  • 您只需要運行一次(無論是在您的開發機器上還是在登台服務器上,無論您想要什么樣的方式)。 當您必須運行多個靜態服務器時,這尤其有用,因為您不必在每個服務器上運行build命令。 有人可能會爭辯說,他們可以使用像Glusterfs這樣的Glusterfs來將文件從一個靜態服務器同步到所有其他服務器,而構建過程只需要運行一次。 然而,就這種設置而言,這是一個完全不同的故事
  • 它使您的部署過程變得簡單,只需提取新代碼並在必要時重新啟動服務器(假設您有一些機制來增加靜態文件版本,以便所有客戶端都將收到最新版本)
  • 避免對生產服務器造成不必要的依賴。 對於某些人來說這可能聽起來很奇怪,但我只是不想在我的生產服務器上安裝任何額外的庫,除非它們是絕對必要的。 由於構建過程在我的開發機器上本地運行,我的生產服務器只有他們運行生產代碼所需的東西而不是其他東西

然而,這種方法也有一些缺點:

  • 如果團隊中有多個開發人員(意外地)運行構建過程並提交代碼,那么您將有一個瘋狂的沖突列表。 但是,只需在合並其他人的所有更改后再次運行構建過程即可解決此問題。 這更多是關於工作流程
  • 您的存儲庫將更大。 考慮到我的捆綁和縮小文件的額外MB,我個人認為這不是一個大問題。 如果你的前端javascript足夠大,這是一個問題,那么這是另一個故事

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM