在部署之前或之后构buildWeb应用程序?

上下文

  • Web应用程序项目具有/build (或/dist )文件夹,其中包含在构build期间(通过Gulp )生成的前端文件。 该文件夹不在源代码pipe理下(例如,请参阅: React.js入门工具包 )
  • 服务器端代码不需要绑定或编译步骤,因此项目中的/src文件夹可以按原样部署(这些源文件用于运行Node.js或ASP.NET vNext服务器)
  • Web应用程序通过Git进行部署(请参阅Heroku或Windows Azure中的基于Git的部署选项)

问题

  1. 在部署之前或之后构build(捆绑和缩小)前端文件是否更好?
    • 如果之前,您最终可能会拥有一个独立的存储库(或分支),源代码pipe理下的/build文件夹与其余的项目文件一起。 此回购仅用于部署目的。
    • 如果在此之后,部署时间可能会增加 – 下载构build过程中使用的附加npm模块所需的时间,则在构build过程中服务器的CPU可能高达100%,这可能会损害Web应用程序的响应能力。
  2. 运行KuduSync命令之前或之后在远程服务器上构build前端文件是否更好?
  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个专门用于提供静态文件),select构build捆绑和缩小的JavaScript文件(用于前端),并将所有这些文件添加到主存储库有几个优点

  • 你只需要运行一次(无论是在你的开发机器上还是在分级服务器上,无论你想要什么)。 当你必须运行多个静态服务器时,这是特别有用的,因为你不必在每个服务器上运行build命令。 有人可能会争辩说,他们可以使用像Glusterfs东西来同步从一个静态服务器到所有其他服务器的文件,而构build过程只需要运行一次。 但是,这种设置是完全不同的
  • 它使得你的部署过程变得简单,只需要取出新的代码,并在必要时重新启动服务器(假设你有一些机制来增加静态文件版本,这样所有的客户端都会收到最新的版本)
  • 避免对生产服务器不必要的依赖。 这听起来有些怪异,但我不想在生产服务器上安装任何额外的库,除非它们是绝对必要的。 构build过程在我的开发机器本地运行,我的生产服务器只有他们需要运行生产代码,没有别的

但是这种方法也有一些缺点:

  • 当你的团队中有多个开发人员(意外地)运行构build过程并提交代码时,你将会有一个疯狂的冲突列表。 但是,通过在合并所有其他人的更改之后再次运行构build过程,可以解决这个问题。 这更多的是关于工作stream程
  • 你的版本库会更大。 我个人不认为这是一个大问题,考虑到我的捆绑和缩小文件额外的MB。 如果你的前端JavaScript足够大,这是一个问题,那么这是另一回事