【问题标题】:Building Angular 2 App using angular-cli and deploying使用 angular-cli 构建 Angular 2 应用程序并进行部署
【发布时间】:2017-04-24 07:11:56
【问题描述】:

我有一个 Angular 2 项目,我试图将其部署在远程 iis 服务器上。在我的本地机器上,该应用程序运行良好。绝对没有任何问题。

我正在使用

为生产模式构建它
ng build --prod

我正在将 dist 文件夹的内容复制到我服务器上的文件夹中。现在这是我第一次部署,没有人指导我。当我访问网站 url 时,与以前相比(当我没有部署它时)需要很长时间才能加载。此外,当我转到页面并刷新时,我会收到 404 Error

现在我已经看到了这两个链接

Angular 2 CLI App throwing 404 errors once deployed

Refresh page got 404: only happen when using /dist folder

但如果有人能详细说明我必须做些什么来修复它并加快加载速度(代码没有问题,它只是部署方法),那将非常有帮助

package.json

{
  "name": "ofweb",
  "version": "0.0.0",
  "license": "MIT",
  "angular-cli": {},
  "scripts": {
    "ng": "ng",
    "start": "ng serve --host 0.0.0.0 --port 6363 --live-reload-port 43453",
    "lint": "tslint \"src/**/*.ts\"",
    "test": "ng test",
    "pree2e": "webdriver-manager update --standalone false --gecko false",
    "e2e": "protractor"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^4.0.1",
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "bootstrap": "^4.0.0-alpha.2",
    "core-js": "^2.4.1",
    "font-awesome": "^4.7.0",
    "fullcalendar": "^3.3.0",
    "jquery": "^3.1.1",
    "moment": "^2.18.1",
    "primeng": "^4.0.0-rc.2",
    "primeui": "^4.1.15",
    "reflect-metadata": "^0.1.9",
    "rxjs": "^5.1.0",
    "systemjs": "^0.20.2",
    "ts-helpers": "^1.1.2",
    "zone.js": "^0.8.4"
  },
  "devDependencies": {
    "@angular/cli": "1.0.0",
    "@angular/compiler-cli": "^4.0.0",
    "@types/jasmine": "2.5.38",
    "@types/node": "~6.0.60",
    "codelyzer": "~2.0.0",
    "jasmine-core": "~2.5.2",
    "jasmine-spec-reporter": "~3.2.0",
    "karma": "~1.4.1",
    "karma-chrome-launcher": "~2.0.0",
    "karma-cli": "~1.0.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-coverage-istanbul-reporter": "^0.2.0",
    "protractor": "~5.1.0",
    "ts-node": "~2.0.0",
    "tslint": "~4.5.0",
    "typescript": "~2.2.0",
    "canonical-path": "^0.0.2",
    "concurrently": "^3.1.0",
    "http-server": "^0.9.0",
    "karma-htmlfile-reporter": "^0.2.2",
    "karma-remap-istanbul": "^0.2.1",
    "lite-server": "^2.2.2",
    "lodash": "^4.17.4",
    "rimraf": "^2.5.4",
    "typings": "^2.1.0"
  }
}

Server Log File Error

2017-04-24 07:35:38 104.245.36.179 GET /admin/organizations - 80 - 122.175.232.166 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 - 404 0 2 349

【问题讨论】:

  • 您好,请您发布您的 package.json 文件。在运行ng build --prod 之前,您是否在服务器上全局安装了 Angular?
  • 你确定我会发布 package.json
  • 至于在服务器上全局安装 Angular。我很确定它已安装。我只知道我必须构建项目并将其放在特定的文件夹中进行部署。其他的东西已经由软件架构师完成了,他不在
  • 服务器是否运行在像AWS这样的服务提供者上?
  • 服务器是iis。它在 Windows 服务器上运行

标签: angular iis angular-cli angular-routing


【解决方案1】:

我无法谈论性能缓慢,但“刷新时 404”问题是因为缺少 Web 服务器配置。

当您尝试从服务器加载默认路由(/)时,您的 Web 服务器会将其解释为对 index.html 的请求并发送 index.html,然后您的 Angular 应用程序将加载。如果您随后导航到某个路由(例如/mystuff),Angular 路由器将控制并正确更新 URL 并将您导航到正确的组件。但是,如果您随后刷新,Web 服务器将看到对 /mystuff 的请求并尝试查找相应的文件,该文件不存在 - 因此是 404。

解决方案是将您的网络服务器配置为将所有对它无法找到的文件的请求重定向到您的 index.html。

See the docs 了解有关如何为 IIS 执行此操作的更多信息。

【讨论】:

  • 我在我的 Angular 项目中添加了一个 web.config,提到了回退
  • 一切都好吗?
  • 抱歉,我无法解决加载缓慢的问题。不过有一个问题,如果您将生产 Angular 应用程序放在运行在您机器上的普通 Web 服务器(而不是 ng 开发服务器)上,它是否也很慢?至少您可以区分出缓慢是否来自生产构建(不太可能,但仍然可能)与您部署到的 IIS 服务器
  • 缓慢是因为 ng build 不是一种可优化的部署方式。我想我将不得不使用 webpack 或 AOT 的东西
  • 如果您使用的是最新版本的angular-cli (1.x),它将默认使用 AOT + 捆绑 build --prod cmd
猜你喜欢
  • 2017-11-16
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2017-07-19
相关资源
最近更新 更多