在生产模式下构建角度应用程序时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在生产模式下构建角度应用程序时出错相关的知识,希望对你有一定的参考价值。

当我想用prod标志构建我的应用程序时,由于在我的一个服务中使用Http模块,构建过程将失败。它无法解析此服务的参数。

这是代码示例

import { BadInput } from './../common/bad-input';
import { NotFoundError } from './../common/not-found-error';
import { AppError } from './../common/app-error';
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';

@Injectable()
export class DataService {
  constructor(private endpoint: string, private http: Http) { }

  private serverUrl:string ='http://example.com/api/'
  private url=this.serverUrl+this.endpoint;

  getAll() {
    return this.http.get(this.url)
      .map(response => response.json())
      .catch(this.handleError);
  }
private handleError(error: Response) {
    if (error.status === 400)
      return Observable.throw(new BadInput(error.json()));

    if (error.status === 404)
      return Observable.throw(new NotFoundError());

    return Observable.throw(new AppError(error))
  }
}

这是我使用ng build --prod时遇到的错误

ERROR in Error: Can't resolve all parameters for DataService in D:/src/app/services/data.service.ts: (?, [object Object]).
    at syntaxError (D:
ode_modules@angularcompilerundlescompiler.umd.js:1729:34)
    at CompileMetadataResolver._getDependenciesMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:15965:35)
    at CompileMetadataResolver._getTypeMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:15833:26)
    at CompileMetadataResolver._getInjectableMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:15819:21)
    at CompileMetadataResolver.getProviderMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:16110:40)
    at D:
ode_modules@angularcompilerundlescompiler.umd.js:16039:49
    at Array.forEach (<anonymous>)
    at CompileMetadataResolver._getProvidersMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:15999:19)
    at CompileMetadataResolver.getNgModuleMetadata (D:
ode_modules@angularcompilerundlescompiler.umd.js:15654:50)
    at addNgModule (D:
ode_modules@angularcompilerundlescompiler.umd.js:24408:58)
    at D:
ode_modules@angularcompilerundlescompiler.umd.js:24419:14
    at Array.forEach (<anonymous>)
    at _createNgModules (D:
ode_modules@angularcompilerundlescompiler.umd.js:24418:26)
    at analyzeNgModules (D:
ode_modules@angularcompilerundlescompiler.umd.js:24293:14)
    at analyzeAndValidateNgModules (D:
ode_modules@angularcompilerundlescompiler.umd.js:24303:35)
    at AotCompiler.analyzeModulesAsync (D:
ode_modules@angularcompilerundlescompiler.umd.js:23937:46)
答案

Http已被弃用,支持HttpClient,所以你可能想看看这个:http://brianflove.com/2017/07/21/migrating-to-http-client/

与此同时,我还没有尝试过这个,但如果你没有使用AOT选项,你可能会继续使用Http一段时间,这个选项默认为prod版本打开。尝试一下:

ng build --prod --aot=false

以上是关于在生产模式下构建角度应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在生产模式下构建 Ionic 应用程序,Ionic 构建的行为不同

在弹性 beantalk 上部署 rails 应用程序时出错(生产模式)

使用 createReducer 函数时为生产构建 angular+ngrx 8 时出错

发布模式出错但构建模式不出错

Flex也可以在生产模式下获取错误消息

Android:在drawerlayout中使用地图膨胀片段时出错