Angular 是一个强大的前端框架,它可以帮助开发者快速构建出高质量的 Web 应用程序。但是,在部署 Angular 应用程序之前,我们需要了解一些基本的部署步骤。
Angular 部署的第一步是将 Angular 应用编译为 JavaScript 代码。这可以通过使用 Angular CLI 来完成,它可以帮助我们将 TypeScript 代码转换为 JavaScript 代码。要使用 Angular CLI 进行部署,我们需要在命令行中运行 ng build 命令:
ng build --prod
该命令会生成一个 dist 目录,其中包含了所有已生成的文件。这些文件就是我们要部署到服务器上的文件。
在将文件部署到服务器之前,我们还需要对其进行优化。Angular CLI 提供了一个叫做“AoT”(Ahead-of-Time) 的优化工具来帮助我们优化应用程序代码。AoT 优化工具可以帮助减少应用程序体积并提升性能。要使用 AoT 优化工具,我们需要在命令行中运行 ng build --aot 命令:
ng build --prod --aot
该命令会生成一个 dist 目录,其中包含了所有已优化的文件。然后就可将 dist 目录中的文件上传到服务器上去了。
在上传完文
如果 myapp
是包含项目可分发文件的目录,你通常会在语言环境目录中为不同的语言环境提供不同的版本,比如法语版的 myapp/fr
和西班牙语版的 myapp/es
。
带有 href
属性的 HTML base
标签指定了相对链接的基本 URI 或 URL。如果你将工作空间构建配置文件 angular.json
中的 "localize"
选项设置为 true
或语言环境 ID 数组,CLI 会为应用程序的每个版本调整 base href
。要为应用程序的每个版本调整 base href
,CLI 会将语言环境添加到配置的 "baseHref"
中。在工作区配置文件 angular.json
中为每个语言环境指定 "baseHref"
。以下示例展示了设置为空字符串的 "baseHref"
。
"projects": {
"angular.io-example": {
// ...
"i18n": {
"sourceLocale": "en-US",
"locales": {
"fr": {
"translation": "src/locale/messages.fr.xlf",
"baseHref": ""
}
}
},
"architect": {
// ...
}
}
}
// ...
}
此外,要在编译时声明 base href
,请将在 CLI 中使用带有 --baseHref
选项的 ng build
。
多语言的典型部署方式是为来自不同子目录的每种语言提供服务。使用 Accept-Language
HTTP 标头将用户重定向到浏览器中定义的首选语言。如果用户未定义首选语言,或者首选语言不可用,则服务器将回退到默认语言。要更改语言,就转到另一个子目录。 子目录的更改通常使用应用程序中实现的菜单进行。
以下示例展示了 Nginx 配置。
http {
# Browser preferred language detection (does NOT require
# AcceptLanguageModule)
map $http_accept_language $accept_language {
~*^de de;
~*^fr fr;
~*^en en;
}
# ...
}
server {
listen 80;
server_name localhost;
root /www/data;
# Fallback to default language if no preference defined by browser
if ($accept_language ~ "^$") {
set $accept_language "fr";
}
# Redirect "/" to Angular application in the preferred language of the browser
rewrite ^/$ /$accept_language permanent;
# Everything under the Angular application is always redirected to Angular in the
# correct language
location ~ ^/(fr|de|en) {
try_files $uri /$1/index.html?$args;
}
# ...
}
以下示例展示了 Apache 配置。
<VirtualHost *:80>
ServerName localhost
DocumentRoot /www/data
<Directory "/www/data">
RewriteEngine on
RewriteBase /
RewriteRule ^../index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (..) $1/index.html [L]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de/ [R]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [R]
RewriteCond %{HTTP:Accept-Language} !^en [NC]
RewriteCond %{HTTP:Accept-Language} !^de [NC]
RewriteRule ^$ /fr/ [R]
</Directory>
</VirtualHost>
前提条件对下列概念有基本的理解:Angular动画简介转场与触发器到目前为止,我们已经学过了单个HTML元素的简单动画。Angular还允...
生产环境下的ServiceWorker本页讲的是如何使用AngularServiceWorker发布和支持生产环境下的应用。它解释了AngularServiceWorker...
安全本主题会讲述Angular为防范Web应用常见的安全漏洞和攻击(比如跨站脚本攻击)内置的保护措施,但不会涉及应用级安全,比如用...
Angular编译器选项使用AoT编译时,可以通过在TypeScript配置文件中指定模板编译器选项来控制如何编译应用程序。模板选项对象an...
AngularJS v1.5 简明教程中文版本文是 樊潇洁 翻译的最新版本(v1.5版)的AngularJS教程。官方英文版请见AngularJS 官方教程和An...
AngularJS ng-change 指令 AngularJS 参考手册AngularJS 实例当输入框的值改变时执行函数:body ng-app="myApp"div ng-controller...
AngularJS ng-click 指令 AngularJS 参考手册AngularJS 实例按钮每次点击时,计数变量 count 自动加 1: button ng-click="count ...
AngularJS ng-dblclick 指令 AngularJS 参考手册AngularJS 实例在每次鼠标双击时,变量 count 加 1:h1 ng-dblclick="count = cou...
AngularJS ng-href 指令 AngularJS 参考手册AngularJS 实例使用 AngularJS 设置添加链接:div ng-init="myVar = 'http://www....