一旦Angular应用进入生产阶段,你该如何部署它们呢?
到目前为止我看到的所有指南(甚至在angular.io上)都依赖于一个lite-server来服务和browserSync来反映变化——但是当你完成开发时,你如何发布应用程序呢?
我是否导入index.html页面上所有已编译的.js文件,还是使用gulp缩小它们?它们会起作用吗?在生产版本中,我是否需要SystemJS ?
一旦Angular应用进入生产阶段,你该如何部署它们呢?
到目前为止我看到的所有指南(甚至在angular.io上)都依赖于一个lite-server来服务和browserSync来反映变化——但是当你完成开发时,你如何发布应用程序呢?
我是否导入index.html页面上所有已编译的.js文件,还是使用gulp缩小它们?它们会起作用吗?在生产版本中,我是否需要SystemJS ?
当前回答
使用Angular CLI,这很简单。以Heroku为例:
创建Heroku帐号并安装CLI 移动angular-cli dep到package中的依赖项。json(这样当你推送到Heroku时它就会被安装。 添加一个postinstall脚本,当代码被推送到Heroku时将运行ng build。还要为将在下面的步骤中创建的Node服务器添加启动命令。这将把应用程序的静态文件放在服务器上的dist目录中,然后启动应用程序。
"scripts": {
// ...
"start": "node server.js",
"postinstall": "ng build --aot -prod"
}
创建一个Express服务器来服务应用程序。
// server.js
const express = require('express');
const app = express();
// Run the app by serving the static files
// in the dist directory
app.use(express.static(__dirname + '/dist'));
// Start the app by listening on the default
// Heroku port
app.listen(process.env.PORT || 8080);
创建一个Heroku远程和推动部署应用程序。
heroku create
git add .
git commit -m "first deploy"
git push heroku master
下面是我做的一个快速的书写,有更多的细节,包括如何强制请求使用HTTPS,以及如何处理PathLocationStrategy:)
其他回答
我想说的是,很多在使用angular之前就有Web经验的人,都习惯于在战争中部署他们的Web构件(例如,在Java/Spring项目中部署jquery和html)。在试图将我的angular项目和REST项目分开后,我最终这样做是为了解决CORS问题。
我的解决方案是将所有用CLI生成的angular(4)内容从My -app移到MyJavaApplication/angular。然后我修改了我的Maven构建,使用Maven -resources-plugin将内容从/angular/dist移动到我的发行版的根目录(即$project.build.directory}/MyJavaApplication)。Angular默认从war的根目录加载资源。
当我开始在我的angular项目中添加路由时,我进一步修改了maven build,将index.html从/dist复制到WEB-INF/app。并且,添加了一个Java控制器,将所有服务器端rest调用重定向到索引。
为了快速廉价地托管angular应用,我一直在使用Firbase托管。它在第一层是免费的,使用Firebase CLI部署新版本非常容易。本文解释了将你的angular 2产品应用部署到Firebase的必要步骤:https://medium.com/codingthesmartway-com-blog/hosting-angular-2-applications-on-firebase-f194688c978d
简而言之,你运行ng build——prod,它会在包中创建一个dist文件夹,这个文件夹会被部署到Firebase Hosting上。
要在IIS中部署应用程序,请遵循以下步骤。
第一步:使用ng Build——prod命令构建Angular应用
步骤2:构建后,所有文件都存储在应用程序路径的dist文件夹中。
步骤3:在C:\inetpub\wwwroot中创建一个名为QRCode的文件夹。
第四步:复制dist文件夹的内容到C:\inetpub\wwwroot\QRCode文件夹。
步骤5:使用命令(Window + R)打开IIS管理器,输入inetmgr,单击“确定”。
步骤6:右键单击默认网站,然后单击添加应用程序。
第七步:输入别名“QRCode”,设置物理路径为C:\inetpub\wwwroot\QRCode。
第八步:打开index.html文件,找到行href="\"并删除'\'。
步骤9:现在在任何浏览器中浏览应用程序。
你也可以跟着视频更好地理解。
视频网址:https://youtu.be/F8EI-8XUNZc
如果你像我一样在localhost上测试应用程序,或者你会有一些空白白页的问题,我使用这个:
ng build --prod --build-optimizer --base-href="http://127.0.0.1/my-app/"
解释:
ng build
构建应用程序,但在代码中有许多空格,制表符和其他东西,使代码能够被人类阅读。对于服务器来说,代码看起来如何并不重要。这就是为什么我使用:
ng build --prod --build-optimizer
这使得代码可以用于生产并减少大小[——build-optimizer]允许减少更多的代码]。
所以最后我添加——base-href="http://127.0.0.1/my-app/"来显示应用程序在哪里是'主框架'[简单的话]。有了它,你甚至可以在任何文件夹中拥有多个angular应用。
您可以构建用于生产的应用程序
ng build --configuration=production
然后你可以检查你的角度。它的值通常是dist,但也可以是不同的。
"build": {
"options": {
"outputPath": "dist"
使用dist作为值,生成的输出文件将放在/dist文件夹下
在构建angular项目时,你的项目将只由静态文件Html、Javascript、Css和图像或其他资产组成。正因为如此,你所需要的只是一个可以向客户端提供静态文件的web服务器。就这么简单。可以是nginx, tomcat,任何可以将这些静态文件提供给客户端的东西。这在angular的文档中也有说明
因为这些文件是静态的,你可以把它们托管在任何web服务器上 具备文件服务能力
你在outputPath下构建的项目已经包含了一个index.html,它将自动导入所有必要的文件,所以当index.html被传递给客户端时,浏览器也将获取所有其他必要的文件。必要的信息已经包含在index.html中。
你的第二个问题
我用gulp缩小它们吗
官方的方式
角。Json将包含每个环境的特定配置,其中之一将是优化
优化可以是布尔值(true, false)
"configurations": {
"production": {
"optimization": true --> will mean true for all properties of the next custom object
优化也可以是一个自定义对象
"configurations": {
"optimization": {
"scripts": true,
"styles": {
"minify": true,
"inlineCritical": true
},
"fonts": true
}
切换到"scripts": false将导致.js文件不会被缩小
同时切换到样式-> "minify": false也将避免样式缩小。
不管角的构型是什么。Json进行优化,它可以被覆盖,如果你在构建过程中提供一个参数。因此,通过执行ng build——configuration=production——optimization=false,它将构建用于生产的项目,并将值false应用到优化对象的每个属性,这实际上将禁用所有的最小化。