我一直试图在我的Angular应用程序中使用ngTools设置AOT(使用Webpack进行模块加载)并且有一个绝对的噩梦.我已经浏览了这里和这里的文档中的各种资源,并阅读了ngTools自述文件,查看了Angular CLI中的示例(此应用程序不是使用Angular CLI构建的,但我认为它至少是通过Angular + Webpack + Sass + ngTools 上的这个资源找到一个有用的参考资料(我也使用SASS但是我的webpack.config.aot.js编译得很好 - 它确实阻止我切换到ngc,至少到目前为止正如我发现的那样,这是我在一些例子中看到过的,以及我在过去几天发现的每个github问题或stackoverflow帖子,无论我做什么尝试构建aot产生以下错误:
ERROR in window is not defined
ERROR in /Users/nataliecoley/development/company-app-name/src/main-aot.ts (2,36): Cannot find module '../aot/src/app/app.module.ngfactory'.
ERROR in ./src/main-aot.ts
Run Code Online (Sandbox Code Playgroud)
找不到模块:错误:无法解析'/ Users/nataliecoley/development/company-app-name/src'中的'../aot/src/app/app.module.ngfactory'@ ./src/main- aot.ts 2:0-73
目前我一直在忽略第一个问题(部分是因为我似乎无法在网上发现任何其他人有这个错误,部分是因为我搜索了我的整个代码库,不包括节点模块,并且window没有出现在但是如果有人知道可能来自哪里(或者你认为它与错误2和3相关),我愿意接受建议.
虽然我认为第二个和第三个错误消息是我的问题的主要来源,因为很明显,app.module.ts之前没有编译,main-aot.ts所以main-aot.ts编译它时无法找到文件.但是,我根据我专门发现的文档进行了设置,以便app.module.ngfactory在编译器到达时已经编译好并准备好了main-aot.ts.
很明显,我的设置中缺少一些部分,因为我在网上找到的每个解决方案设置略有不同,我似乎无法缩小范围.所有我知道的是,到目前为止我没有尝试过的任何内容消除了这个错误(或产生任何其他新错误),并且我很乐意帮助那些成功设置AOT + ngTools + webpack + Angular来缩小正在发生的事情的人这里.
这是我的文件结构(简化):
.
+-- config/
| +-- helpers.js
| +-- webpack.common.js
| +-- webpack.dev.js
| +-- webpack.prod.js
+-- src/
| …Run Code Online (Sandbox Code Playgroud) 我正在为一个相当大的MonoTouch应用程序构建系统,该应用程序使用了许多跨平台组件.因此,我们经常遇到这样一种情况:其中一个跨平台组件做了一些无法编译的东西.如果实际执行某些操作,设备构建将崩溃.此时,我们必须追踪崩溃发生的位置,找到有问题的方法,并将其破解,以便它不会尝试在MonoTouch构建中进行JIT.
我的问题是,有没有办法在构建过程中检测这些东西?起初,我们有一个试图检测通用虚方法的正则表达式,但是某些类型的LINQ和lambdas也会出现问题,它们也会尝试JIT,而我宁愿不尝试编写自己的解析器来检测它们所有.我已经尝试过使用了monodis AssemblyName.dll,它会给我很多遗漏的方法错误,但是大多数它们似乎是无害的 - 即使它们不是,它也没有告诉我对所述方法的引用在哪里是这样的我可以看到需要做什么.最重要的是,有时它会在组装结束时Abort trap: 6或Bus error: 10之前崩溃,这是非常无益的.有没有更好的方法可以在构建过程中检测到JIT的尝试?
我认为这在某种程度上与记忆有关,但我已经做了我能想到的一切.我确保课程处置财产.在类级别而不是函数范围内维护硬引用,用于在我使用它们时可能获得GC的内容等.
基本上该应用程序在模拟器中工作正常,但在真实设备上的同一位置崩溃.好像我得到了几个不同的堆栈,但它们都在同一个地方.
我在我的应用程序中使用了大量事件.线程太多了?
堆栈跟踪:
在Newtonsoft.Json.JsonWriter.WriteValue(object)at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(Newtonsoft.Json.JsonWriter,object,Newtonsoft.Json.Serialization.JsonContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json. Serialization.JsonContract)在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(Newtonsoft.Json.Serialization.JsonSerializer.Jon.Serialization Newtonsoft.Json.JsonWriter,对象,Newtonsoft.Json.Serialization.JsonObjectContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract)at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(Newtonsoft.Json.JsonWriter,object ,牛顿的Newtonsoft.Json.Serialization.JsonContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract)Newtonsoft的soft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(Newtonsoft.Json.JsonWriter,Newtonsoft.Json.Utilities.IWrappedCollection,Newtonsoft.Json.Serialization.JsonArrayContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract)在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter中的.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(Newtonsoft.Json.JsonWriter,object,Newtonsoft.Json.Serialization.JsonContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract).在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(Newtonsoft.Json.JsonWriter,对象,Newtonsoft.Json.Serialization)中的WriteMemberInfoProperty(Newtonsoft.Json.JsonWriter,object,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract)在Newtonsoft.Json.Seriali的.JsonObjectContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract)在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(Newtonsoft)的zation.JsonSerializerInternalWriter.SerializeValue(Newtonsoft.Json.JsonWriter,object,Newtonsoft.Json.Serialization.JsonContract,Newtonsoft.Json.Serialization.JsonProperty,Newtonsoft.Json.Serialization.JsonContract) .Jon.JsonWriter,object)at Newtonsoft.Json.JsonSerializer.SerializeInternal(Newtonsoft.Json.JsonWriter,object)at Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,object)at RestSharp.Serializers.JsonSerializer.Serialize(对象)[0x0001c]位于/ Users/sonmez56/Projects /中的/Users/sonmez56/Projects/TrackAbout.Mono/RestSharp/RestSharp/Serializers/JsonSerializer.cs:64中的RestSharp.RestRequest.AddBody(对象,字符串)[0x00019] TrackAbout.Mono/RestSharp/RestSharp/RestRequest.cs:203,位于TrackAboutMonoCore.Services的/Users/sonmez56/Projects/TrackAbout.Mono/RestSharp/RestSharp/RestRequest.cs:232中的RestSharp.RestRequest.AddBody(对象)[0x00000] .TrackAboutAPIRequestBuilder/TARest 位于/Users/sonmez56/Projects/TrackAbout.Mono/TrackAboutMonoCore/Services/ActionsService的TrackAboutMonoCore.Services.ActionsService.CustomerSetVolume(int,System.Collections.Generic.List
1<TrackAboutMonoCore.Models.Asset>,System.Action1>)[0x00000]中的Request.WithBody(T)<0x00097> .cs:24在TrackAboutMonoCore.Controllers.LocateController.Save(object,System.EventArgs)[0x00055] in /Users/sonmez56/Projects/TrackAbout.Mono/TrackAboutMonoCore/Controllers/LocateController.cs:64 at MonoTouch.UIKit.UIBarButtonItem//Developer/MonoTouch/Source/monotouch/src/UIKit/UIBarButtonItem.cs:23中的Callback.Call(MonoTouch.Foundation.NSObject)[0x00010] at(wrapper runtime-invoke)object.runtime_invoke_dynamic(intptr,intptr,intptr,intptr) )<0xffffffff>在TrackAboutIOS.Application.Main的/Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38中的MonoTouch.UIKit.UIApplication.Main(string [],string,string)[0x0004c]在/Users/sonmez56/Projects/TrackAbout.Mono/TrackAboutIOS/TrackAboutIOS/Main.cs:16 at(wrapper runtime-invo)中的字符串[])[0x00000] ke)object.runtime_invoke_dynamic(intptr,intptr,intptr,intptr)<0xffffffff>本机堆栈跟踪:
0 TrackAboutIOS 0x01d20618 mono_handle_native_sigsegv + 280个1 TrackAboutIOS
0x01d45bd4 sigabrt_signal_handler + 180个2 libsystem_c.dylib
0x376647ed _sigtramp + 48个3 libsystem_c.dylib
0x3765a20f pthread_kill + 54 4 libsystem_c.dylib
0x3765329f中止+ 94个5 TrackAboutIOS
0x01e394ac monoeg_g_log + 208 6个TrackAboutIOS
0x01d11664 get_numerous_trampoline + 160个7个TrackAboutIOS
0x01d11aac mono_aot_get_imt_thunk + 56个8 TrackAboutIOS
0x01dbdc50 initialize_imt_slot + 112个9 TrackAboutIOS
0x01dbf1c4 …
当我直接在设备上测试我的应用程序时,由于我尝试JIT编译方法而导致崩溃。我知道为什么会发生这些崩溃,我只是想让它们在模拟器上测试时出现。这比每次都部署到设备要容易得多(它也花费更少的时间)。
我尝试将--aot-only添加到mtouch参数,但出现“未知命令行参数”错误。
我真的需要关心可以发出.s指令的地方吗?或者它只会影响尺寸,但真正的性能会是一样的吗?
生成的dll也将在AOT平台上使用.有.s和没有IL的结果AOT-ed dll是否相同?
我的意思是br.s,ldloca.s等.
我有一个大型项目,直到现在都在 webpack 上运行,并且在 angular@4.3.3 上运行良好。今天我计划将其转移到 ng-cli 以利用通用等功能。一切都运行良好,除了当我尝试在 prod/prod+aot 中构建项目时,我得到:最大调用堆栈大小超出。
检查了问题的各个地方,大多数人都告诉检查循环依赖。但是根据最新的 cli@1.2.7,循环依赖应该显示为构建时间,但事实并非如此。我计划增加节点虚拟机堆栈的大小,但无法实现。我不想使用 ng 弹出并再次陷入 webpack 的混乱中。
cli@1.2.7 还有其他一些方法或解决方案吗
谢谢
包.json
{
"name": "test-project",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/common": "~4.3.3",
"@angular/compiler": "~4.3.3",
"@angular/core": "~4.3.3",
"@angular/forms": "~4.3.3",
"@angular/http": "~4.3.3",
"@angular/animations": "~4.3.3",
"@angular/flex-layout": "^2.0.0-beta.8",
"@angular/material": "^2.0.0-beta.8",
"@angular/cdk": "^2.0.0-beta.8",
"@angular/platform-browser": "~4.3.3",
"@angular/platform-browser-dynamic": "~4.3.3",
"@angular/platform-server": "~4.3.3",
"@angular/router": "~4.3.3",
"angular2-highcharts": "~0.5.5",
"@types/highcharts": "~4.2.57", …Run Code Online (Sandbox Code Playgroud) 我正在使用Angular Compiler在运行时编译组件.此代码工作正常,但如果我想使用AOT-Prerendering,则组件不起作用,因为Angular不会在AOT-Build中加载编译器.
我已经阅读了一些不再适用于Angular5 +的变通方法.你对这个问题有什么解决方案吗?
最好的祝福
export class RuntimeCompilerComponent {
template: string = "";
@ViewChild('dynamicComponent', { read: ViewContainerRef }) container: ViewContainerRef;
constructor(private compiler: Compiler) { }
//Ruft die addComponent Methode auf
createComponent() {
this.addComponent(this.template, null);
}
// Komponente wird dynamisch erzeugt und geladen
// Sollten sich die properties ändern muss ggf. die Changedetection manuell aufgerufen werden.
private addComponent(template: string, properties: any = {}) {
@Component({ template })
class TemplateComponent { }
@NgModule({
imports: [
AppModule,
CommonModule,
ReactiveFormsModule,
FormsModule,
BrowserModule,
], declarations: … 我有一个Angular 5库,我公开它作为一个包,供其他应用程序使用node_modules.
目前,该应用程序是刚刚在时间使用编译(JIT)rollup和gulp并导出为一个包.因此,开发人员应用程序在其JIT编译形式中使用我的包.
关于AOT的研究让我相信任何在AOT编译时的Angular应用程序比浏览器上的JIT对应程序更高效.但是,作为一个库开发人员,我想知道如果我公开我的库AOT编译,应用程序开发人员是否会获得任何性能优势?
我使用ng-bootstrap和许多其他开源库一起在我的模块中创建组件,并在它们之上添加自定义样式或功能.我在模块中使用的所有库是否也需要在他们的AOT表单中,或者我可以使用他们的JIT对应物?
另外,我认为这将是有独立的包我的图书馆是个好主意- packageName和packageName-aot,使用户有一个选项可以选择他们要使用的任何库.
除了整个代码重构(将模板中使用的私有变量更改为public,删除箭头函数,lambda表达式等)之外,在以AOT形式公开我的库模块之前还需要记住什么吗?
由于某些约束,我无法使用Angular CLI,因此必须依赖于@ngtools/webpack获取AOT编译(如果有的话).
目前,我tsconfig.json有以下选择:
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMedtadataEmit": true,
"fullTemplateTypeCheck": true
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了很多,但是Angular AOT文档非常模糊,对于我在这里尝试做的事情并不是很清楚.任何方向都会非常有用.
谢谢!
Xamarin Forms iOS 项目于 2019 年 10 月 10 日在昨天构建。今天更新到 Mac 和 Windows 上的最新组件,项目不再构建。
构建:发布 - iPhone - TestMobile.iOS - 设备
项目适用于 Mac 模拟器。项目在 iPhone 硬件上部署和调试。
构建日志:
3> AOT Compilation exited with code 1, command:
3> MONO_PATH=/Users/bob/Library/Caches/Xamarin/mtbs/builds/TestMobileXF.iOS/e5f1c3a4936492ad245f1c68c3157dfc/C:/Temp/iOS/mtouch-cache/32/3-Build /Library/Frameworks/Xamarin.iOS.framework/Versions/13.4.0.2/bin/arm-darwin-mono-sgen --debug -O=gsharedvt -O=-float32 --aot=mtriple=armv7-ios,data-outfile=/Users/bob/Library/Caches/Xamarin/mtbs/builds/TestMobileXF.iOS/e5f1c3a4936492ad245f1c68c3157dfc/C:/Temp/iOS/mtouch-cache/armv7/ZXingNetMobile.aotdata.armv7,static,asmonly,direct-icalls,full,soft-debug,dwarfdebug,no-direct-calls,outfile=/Users/bob/Library/Caches/Xamarin/mtbs/builds/TestMobileXF.iOS/e5f1c3a4936492ad245f1c68c3157dfc/C:/Temp/iOS/mtouch-cache/armv7/ZXingNetMobile.dll.s "/Users/bob/Library/Caches/Xamarin/mtbs/builds/TestMobileXF.iOS/e5f1c3a4936492ad245f1c68c3157dfc/C:/Temp/iOS/mtouch-cache/32/3-Build/ZXingNetMobile.dll"
3> '/Users/bob/Library/Caches/Xamarin/mtbs/builds/TestMobileXF.iOS/e5f1c3a4936492ad245f1c68c3157dfc/C' in MONO_PATH doesn't exist or has wrong permissions.
3> '/Temp/iOS/mtouch-cache/32/3-Build' in MONO_PATH doesn't exist …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序和一个库,两个独立的存储库。我的应用程序使用我的库,我的库包含一个执行 http 请求的服务。
我的应用程序部署到多个环境,我使用 Angular 的 environment.ts 文件来定义外部服务所在的位置。所有应用程序都通过网关提供服务,并位于同一个 window.location.origin 上。
ivy 被禁用,aot 被启用。
我的图书馆公开了一个 forRoot 如下:
declarations: [
ToggleDirective
],
providers: [
ToggleService,
ToggleServiceConfig
],
exports: [
ToggleDirective
]
})
export class ToggleModule {
static forRoot(config: ToggleServiceConfig): ModuleWithProviders<ToggleModule> {
return {
ngModule: ToggleModule,
providers: [
{provide: ToggleServiceConfig, useValue: config }
]
};
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序的 environment.ts 看起来像这样:
export const environment = {
...
togglesUrl: window.location.origin + '/release-toggling',
...
};
Run Code Online (Sandbox Code Playgroud)
在我的 App 的 app.module 中,我是这样配置的:
...
const releaseToggleServiceConfig: ToggleServiceConfig = { …Run Code Online (Sandbox Code Playgroud) aot ×10
angular ×4
xamarin.ios ×4
angular2-aot ×2
angular5 ×2
c# ×2
ios ×2
jit ×2
.net ×1
angular-cli ×1
il ×1
ivy ×1
javascript ×1
opcode ×1
runtime ×1
webpack ×1
xamarin ×1