很快,我有一个应用程序,这是一个4.6MB的服务。
当我这样做时:
ng serve --prod
我的文件大小为1MB。
然而,--prod以某种方式使我的整个应用程序中断。
我向服务器发送请求的整个服务(基于承诺)不再有效。
bizzar的事情是, ng服务完全正常和 ng服务 - 某些的某些部分也正常工作,如只要没有服务器请求。
我没有发布任何代码,因为 ng serve 版本可以正常工作。
主要问题是:
为什么我会采取帽子行为?
此外,在某些时候,基于 ng serve --prod 的应用程序突然完全无处不在,然后在我重新启动应用程序之后,又一次破坏了应用程序。
编辑: 更多详情
我正在使用Fiddler确保所有细节都正确无误:
如您所见,细节还可以。
现在负责在客户端模拟该请求的代码:
login(uName: string, pw: string, type: number): Promise<any> {
return new Promise(resolve => {
if (type === 1) {
const options = new RequestOptions({ headers: this.headers });
const body = JSON.stringify({ username: uName, password: pw });
this.http.post(this.loginUrl, body, options)
.toPromise()
.then(response => {
resolve(response);
})
.catch(this.handleError);
} else if (type === 2 || type === 3) {
this.http.post(this.loginUrl, { username: uName, token: pw })
.toPromise()
.then(response => {
resolve(response);
})
.catch(this.handleError);
}
});
}
现在注意当我仅使用 ng serve 时,一切都运作正常(网络标签):
如您所见,我已登录,但确实收到了回复。
现在,
我做的那一刻
ng serve --prod
突然,具有相同详细信息的相同登录请求不再有效:
这是超级bizzar。
我负责服务器请求的所有方法都是一样的。
&#34;错误请求&#34; 包含来自服务器本身的一些错误代码(我自己的服务器代码,如&#34;电子邮件未填写&#34;这也是bizzar自我确实发送了正确的参数)
答案 0 :(得分:1)
--prod
是构建选项,默认是调试模式
让我们看一个应用程序中断的示例,看看我们有这样的代码:
<div (click)="toshow = !toShow">Toggle</div>
想象一下,toshow没有在组件上定义,或者我们错误地说了toShow
到toshow
。
在这种情况下,ng build
和ng serve
会有效,但ng build --prod
和ng serve --prod
会出错
答案 1 :(得分:0)
当你ng serve --prod
使用角度cli进行生成构建时,使用树摇动和AOT(Ahead Of Time)编译
意味着树摇动所有组件并添加实际使用的代码,而不是全部。这就是你在ng serve
你可以在cli文档中详细阅读构建正在做什么。
答案 2 :(得分:0)
我们也遇到了类似的问题,并遵循这些指导原则。问题是AOT不支持JIT支持的一些功能。请检查此链接。希望它会对你有所帮助。