Angular-google-maps: AOT编译不起作用。

创建于 2016-09-08  ·  31评论  ·  资料来源: SebastianM/angular-google-maps

问题说明
angular2-google-maps在AOT编译中不起作用。

重现步骤和问题的最小演示

步骤1.克隆angular2-seed项目。(
步骤2.安装angular2-google-maps软件包。
步骤3.配置SYSTEM_CONFIG_DEVSYSTEM_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”,

其他资讯

感谢您的阅读

urgent bug

最有用的评论

@basvdijk抱歉,我正在重写该构建过程,以便能够支持AOT。 希望在接下来的几天有更新。

所有31条评论

@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存储库安装它吗?

谢谢

@ tchinou1npm 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'

这个错误已经纠正了吗?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Halynsky picture Halynsky  ·  3评论

DeveloperAdd007 picture DeveloperAdd007  ·  3评论

shedar picture shedar  ·  4评论

ostapch picture ostapch  ·  4评论

ChrisDevinePimss picture ChrisDevinePimss  ·  3评论