问题说明
angular2-google-maps在AOT编译中不起作用。
重现步骤和问题的最小演示
步骤1.克隆angular2-seed项目。(
步骤2.安装angular2-google-maps
软件包。
步骤3.配置SYSTEM_CONFIG_DEV
和SYSTEM_BUILDER_CONFIG
tools/config/project.config.ts
export class ProjectConfig extends SeedConfig {
...
// angular2 google maps SYSTEM_CONFIG_DEV
this.SYSTEM_CONFIG_DEV.paths['angular2-google-maps/core'] = `node_modules/angular2-google-maps/core/index.js`;
this.SYSTEM_CONFIG_DEV.packages['angular2-google-maps/core'] = { main: 'index.js', defaultExtension: 'js' };
// angular2 google maps SYSTEM_BUILDER_CONFIG
this.SYSTEM_BUILDER_CONFIG.paths['angular2-google-maps/core'] = `node_modules/angular2-google-maps/core/index.js`;
this.SYSTEM_BUILDER_CONFIG.packages['angular2-google-maps/core'] = { main: 'index.js', defaultExtension: 'js' };
}
步骤4.在您的网站上编写代码入门
步骤5. npm start
(效果很好)
第6步。 npm run serve.prod
(效果很好)。
步骤6. npm run build.prod.exp
(发生错误。此版本具有AOT编译。)
当前行为
AOT编译不起作用。(compile.ahead.prod)
...
[17:41:20] Starting 'build.prod.exp'...
[17:41:20] Starting 'clean.prod'...
[17:41:21] Deleted dist/prod
[17:41:21] Deleted dist/tmp
[17:41:21] Finished 'clean.prod' after 1.37 s
[17:41:21] Starting 'tslint'...
[17:41:26] Finished 'tslint' after 5.02 s
[17:41:26] Starting 'css-lint'...
[17:41:31] Finished 'css-lint' after 4.59 s
[17:41:31] Starting 'build.assets.prod'...
[17:41:31] Finished 'build.assets.prod' after 100 ms
[17:41:31] Starting 'build.html_css'...
[17:41:32] Finished 'build.html_css' after 1.25 s
[17:41:32] Starting 'copy.prod'...
[17:41:32] Finished 'copy.prod' after 54 ms
[17:41:32] Starting 'compile.ahead.prod'...
Error: Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol AppModule in /home/ody12/workspace-mine/angular2-seed/dist/tmp/app/app.module.ts, resolving symbol AppModule in /home/ody12/workspace-mine/angular2-seed/dist/tmp/app/app.module.ts
at simplifyInContext (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/static_reflector.ts:540:15)
at StaticReflector.simplify (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/static_reflector.ts:544:18)
at StaticReflector.annotations (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/static_reflector.ts:92:28)
at _loop_1 (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/codegen.ts:63:48)
at CodeGenerator.readFileMetadata (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/codegen.ts:57:22)
at /Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/codegen.ts:105:56
at Array.map (native)
at CodeGenerator.codegen (/Users/iminar/Dev/angular/modules/@angular/compiler-cli/src/codegen.ts:105:33)
at codegen (/home/ody12/workspace-mine/angular2-seed/tools/tasks/seed/compile.ahead.prod.ts:14:69)
at Object.main (/home/ody12/workspace-mine/tools/@angular/tsc-wrapped/src/main.ts:44:12)
Compilation failed
...
预期/期望行为
我希望一切顺利。 帮我。
angular2和angular2-google-maps版本
angular2:RC6
angular2-google-maps:“ 0.14.0”,
其他资讯
感谢您的阅读
@DoyeonOhTravel如何共享app.module.ts代码? 谢谢!
我看到的是同一件事-可能与丢失的ngc
-生成的.metadata.json
文件有关。 参见https://github.com/angular/angular/issues/11262
@SebastianM实际上,Angular团队建议图书馆供应商也应该发布.metadata.json文件。 这些文件由ngc自动生成。
您可能会发现以下评论有用:
https://github.com/angular/angular/issues/11262#issuecomment -244449696
https://github.com/angular/angular/issues/11262#issuecomment -244472000
https://github.com/angular/angular/issues/11262#issuecomment -244489405
完整对话(https://github.com/angular/angular/issues/11262)
@SebastianM这是我的app.module.ts代码。 谢谢您的回复!
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { APP_BASE_HREF } from '@angular/common';
import { RouterModule } from '@angular/router';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { routes } from './app.routes';
import { AboutModule } from './about/about.module';
import { HomeModule } from './home/home.module';
import { SharedModule } from './shared/shared.module';
import { AgmCoreModule } from 'angular2-google-maps/core/index.js';
import { provideLazyMapsAPILoaderConfig } from 'angular2-google-maps/core';
@NgModule({
imports: [
BrowserModule,
HttpModule,
RouterModule.forRoot(routes),
AboutModule,
HomeModule,
SharedModule.forRoot(),
AgmCoreModule.forRoot()
],
declarations: [AppComponent],
providers: [
{
provide: APP_BASE_HREF,
useValue: '<%= APP_BASE %>'
},
provideLazyMapsAPILoaderConfig({
apiKey: 'key',
clientId: ''
})
],
bootstrap: [AppComponent]
})
export class AppModule { }
@ rh389 @ naveedahmed1正如您所说,似乎需要metadata.json
。 谢谢!。
@SebastianM这个分支是使用googleMap的示例代码。
@DoyeonOhTravelHow @doyeonOh @ naveedahmed1谢谢大家! 今天晚上我会检查一下。
不确定此修复程序的状态,但是最好在ng2-translate上检查
在这篇文章中,我将重点介绍一个解决该问题的示例库的链接
我写了您提到的博客文章。 我很高兴你喜欢它。 我认为您遇到的错误与metadata.json
文件没有直接关系,尽管您也将需要这些文件。 我的猜测是在代码中的某处您有export const blah = () => something
,需要将其更改为export function blah() { return something; }
。
我写了另一篇文章,探讨了一些错误(包括Function calls are not supported
错误)的解决方案,我遇到了将库更新为与AoT兼容的问题。
+1支援AoT
昨天一直在努力将angular2-google-maps与Ionic2 RC0集成
非常感谢!
@modularcoder您实际上使它正常工作了吗? 我尝试按照上面建议的两个帖子将lambda更改为factory-pattern函数并导出,但是仍然失败。
@lazarljubenovic仅在开发环境的构建中没有AoT。
我已经在这里描述了步骤
https://forum.ionicframework.com/t/angular2-google-maps-in-ionic-2/65736
确保安装了最新版本的@ ionic / app-scripts,在开发人员构建期间不会进行AoT编译。
https://github.com/driftyco/ionic-app-scripts
@modularcoder当您必须为Android构建应用程序时
@allurco是的,我已经通过在软件包package.json中添加“ --dev”标志来构建任务,从而在没有AoT编译的情况下成功构建了该应用程序。
我已经创建了一个示例仓库
https://github.com/modularcoder/ionic2-angular2-google-maps-example/blob/master/README.md
有关更多信息,请参阅自述文件。
PS确保已安装最新版本的@ ionic / app-scripts软件包。
@SebastianM关于何时可以修复此错误的任何更新? 谢谢!
@basvdijk抱歉,我正在重写该构建过程,以便能够支持AOT。 希望在接下来的几天有更新。
@SebastianM太好了! 您的努力真的值得赞赏👍
很高兴看到这是固定的! 您打算何时发布此更新?
是固定的吗? 在AoT中使用angular2-google-maps会引发错误“静态地解析符号值时遇到错误。不支持函数调用。考虑使用对导出函数的引用来替代符号或lambda来解析符号”。
我认为该错误已修复,该问题已添加到0.16里程碑中
@ naveedahmed1 0.16.0的里程碑为55%,请参见https://github.com/SebastianM/angular2-google-maps/milestone/12
也许是我,但是我从GitHub存储库安装了该库,但出现了两个错误:
Consider replacing the function or lambda with a reference to an exported function, resolving symbol LAZY_MAPS_API_CONFIG in /Users/william/Ionic/mapOnDevice1/node_modules/angular2-google-maps/src/core/services/maps-api-loader/lazy-maps-api-loader.ts,
resolving symbol AgmCoreModule in /Users/william/Ionic/mapOnDevice1/node_modules/angular2-google-maps/src/core/core-module.ts,
其他人 ?
如前所述, https://github.com/SebastianM/angular2-google-maps/milestone/12据我所知,最新发布的版本确实还不支持AoT。
@basvdijk通过运行npm install git+https://[email protected]/SebastianM/angular2-google-maps.git
会不会安装带有修改的版本?
@staticint确实可能是这种情况。 也许@SebastianM可以描述您如何安装具有AoT支持的最新git版本。
编辑:对不起,我错了-npm安装应该已经为您构建。
通过直接使用npm拉回仓库,您只会得到来源,而不是已建资产。
从理论上讲,您可以克隆此存储库,在本地npm链接到您的项目,但这可能仅对本地开发然后使用npm将其拉出。
有人知道如何从GitHub存储库安装它吗?
谢谢
@ tchinou1在npm docs中。
一个问题。 我只是在master分支上进行了分叉,克隆,构建和npm-link',在我现有的项目中,我得到了Uncaught Error: Can't resolve all parameters for LazyMapsAPILoader: (?, WindowRef, DocumentRef).
。 我将这个lib导入到延迟加载的模块中,并在模块的imports
以下代码:
AgmCoreModule.forRoot({
apiKey: 'xxx',
}),
我尝试创建一个黑色的新项目,并尝试最小程度地重现这种情况,但是它可以在另一个仓库中使用,所以我不知道从哪里开始寻找。 就像它没有收到通过forRoot
方法传递的对象。
任何人都有类似的情况或此错误消息? 我知道没有任何代码和不可复制的错误是一个漫长的过程,但是我已经摆脱了主意。
如何更新我的谷歌角度地图,以便AOT工作? 现在可以使用AOT版本了吗?
要使AOT正常运行,请将"angular2-google-maps": "^0.16.0",
到package.json
文件中
然后在您的应用程序组件中导入模块:
import { AgmCoreModule } from 'angular2-google-maps/core';
并将其添加到您的导入中(用您的api键替换xxxx)
NgModule({
declarations: [],
imports: [
AgmCoreModule.forRoot({
apiKey: 'xxxxxxxxxxxxxxxxxxxxx'
})
],
现在,您可以在模板中使用类似于以下内容的组件:
<sebm-google-map disableDefaultUI="true" [zoom]="zoom" [latitude]="location.latitude" [longitude]="location.longitude">
<sebm-google-map-marker [latitude]="location.latitude" [longitude]="location.longitude"></sebm-google-map-marker>
</sebm-google-map>
我正在使用0.17.0里程碑,并且下面的错误一直存在。
“找不到名称'google'。
“找不到名称空间'google'
这个错误已经纠正了吗?
最有用的评论
@basvdijk抱歉,我正在重写该构建过程,以便能够支持AOT。 希望在接下来的几天有更新。