当我想用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:\node_modules\@angular\compiler\bundles\compiler.umd.js:1729:34)
at CompileMetadataResolver._getDependenciesMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:15965:35)
at CompileMetadataResolver._getTypeMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:15833:26)
at CompileMetadataResolver._getInjectableMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:15819:21)
at CompileMetadataResolver.getProviderMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:16110:40)
at D:\node_modules\@angular\compiler\bundles\compiler.umd.js:16039:49
at Array.forEach (<anonymous>)
at CompileMetadataResolver._getProvidersMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:15999:19)
at CompileMetadataResolver.getNgModuleMetadata (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:15654:50)
at addNgModule (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:24408:58)
at D:\node_modules\@angular\compiler\bundles\compiler.umd.js:24419:14
at Array.forEach (<anonymous>)
at _createNgModules (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:24418:26)
at analyzeNgModules (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:24293:14)
at analyzeAndValidateNgModules (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:24303:35)
at AotCompiler.analyzeModulesAsync (D:\node_modules\@angular\compiler\bundles\compiler.umd.js:23937:46)
答案 0 :(得分:0)
Http已被弃用,支持HttpClient,因此您可能希望对此进行调查:http://brianflove.com/2017/07/21/migrating-to-http-client/
与此同时,我还没有尝试过这个问题,但是如果您没有使用AOT选项,那么您可能会继续使用Http一段时间。 prod构建的默认值。试一试:
ng build --prod --aot=false