错误:无法在--prod中确定OverlayPortal类的模块

时间:2017-10-06 05:44:59

标签: angular cordova ionic2 ionic3 node-modules

我不确定我是仅在ionic cordova run android --prod处理问题而我的ionic cordova run android工作正常。

ERROR:

Error: Cannot determine the module for class OverlayPortal in /Users/gopi/Documents/bos/hybrid-app/node_modules/ionic-angular/es2015/components/app/overlay-portal.d.ts! Add OverlayPortal to the NgModule to fix it.
Cannot determine the module for class IonicApp in /Users/gopi/Documents/bos/hybrid-app/node_modules/ionic-angular/es2015/components/app/app-root.d.ts! Add IonicApp to the NgModule to fix it.
Cannot determine the module for class ClickBlock in /Users/gopi/Documents/bos/hybrid-app/node_modules/ionic-angular/es2015/components/app/click-block.d.ts! Add ClickBlock to the NgModule to fix it.
Cannot determine the module for class Slides in /Users/gopi/Documents/bos/hybrid-app/node_modules/ionic-angular/es2015/components/slides/slides.d.ts! Add Slides to the NgModule to fix it.

有人可以给我清楚的解释:

这是我的ionic info

cli包:(/ usr / local / lib / node_modules)

@ionic/cli-utils  : 1.9.2
ionic (Ionic CLI) : 3.9.2

全球套餐:

Cordova CLI : 7.0.1

本地包裹:

@ionic/app-scripts : 1.3.8
Cordova Platforms  : android 6.2.3 ios 4.4.0
Ionic Framework    : ionic-angular 3.4.2

系统:

Android SDK Tools : 25.2.5
Node              : v6.11.1
npm               : 3.10.10
OS                : macOS Sierra
Xcode             : Xcode 8.3.2 Build version 8E2002

12 个答案:

答案 0 :(得分:9)

我终于找到了解决这个问题的方法。我从ionic-angular导入了一些直接导入嵌套组件的导入,而不是从顶级包导出导入。我猜测产品AOT编译器并不喜欢从顶层导入一些导入,而是直接导入嵌套项目。我的一个例子如下。我的猜测是你可以选择这些方法中的任何一种,但是在混合它们时,AOT编译器不会感到高兴。

不可

import { LoadingController } from 'ionic-angular';

<强>为

import { LoadingController } from 'ionic-angular/components/loading/loading-controller';

答案 1 :(得分:1)

我遇到了同样的问题,然后我更改了一个离子角导入地址。 以前是

import { AlertController } from "ionic-angular\umd\components\alert"

我将其更改为

import { AlertController } from "ionic-angular"

现在它对我有用。

答案 2 :(得分:1)

此解决方案对我有用。安装与NPM我所有组件后,安装单独打字稿2.8.1版

npm install typescript@2.8.1

再次运行构建

答案 3 :(得分:1)

这将帮助您解决此问题。

https://stackoverflow.com/a/55832874/849870

我解决了我的问题。在我的项目中,我使用了过时的模块ion-datepicker 如果您还使用同一问题,请按照以下步骤操作,找到并发现已感染或过时的模块。

1。第一步:

在项目中的所有文件中查找 from 'ionic-angular/

2。第二步:

如果您发现这个词像 import { xyz } from 'ionic-angular/xyz/abc'

更新或删除该模块。

答案 4 :(得分:0)

在我的情况下,这是因为我有一个模块的备份,我有

MyModule
|- MyModule.ts -> class MyModule {}
MyModuleOld
|- MyModule.ts -> class MyModule {}

答案 5 :(得分:0)

按照建议的here,删除页面界面参考。更改

let page: Page;

let page;

答案 6 :(得分:0)

在安装诊断程序后,我遇到了此错误

npm install --save @ionic-native/diagnostic@4

我还原了package.json,然后删除并添加了

更新的android平台
ionic cordova platform rm android && ionic cordova platform add android@latest

解决了。

答案 7 :(得分:0)

-使用aot进行prod编译。但是,如果您只想为发布而编译,则仅使用--release标志,但会失去aot的功能

答案 8 :(得分:0)

1)搜索项目中出现的“页面”并将其删除。

使用Ubuntu或Mac终端通过点击进行快速搜索:

> grep -r ": Page" src/*
//then
> grep -r ":Page" src/*

像这样删除它:

//let page:Page;
//becomes 
let page;
//and remove the import in the top of the file

2)搜索项目中出现的“ ionic-angular / xxxxxx”,并将其删除。

grep -r "from \'ionic-angular\/" src/*

如果您使用的是“ ionic-angular / xxxxxx”,则只需将其更改为“ ionic-angular”,即可进入Ionic文档并检查组件:

https://ionicframework.com/docs/v3/components/#overview

答案 9 :(得分:0)

在我的情况下,这是我创建的Pipe(将其命名为“ CustomPipe”),并且我没有使用它,所以我没有在PipesModule中声明它。 我有4个管道,其中3个在PipesModule中使用,声明和导出。但是没有在任何地方声明“ CustomPipe”,所以当我运行ionic cordova build android --prod时,出现以下错误:

ERROR in : Cannot determine the module for class CustomPipe in .../app/pipes/custom.pipe.ts! Add CustomPipe to the NgModule to fix it.

由于我没有使用它,所以我删除了它,并且效果很好。

答案 10 :(得分:0)

这是一个对我有用的修复程序。

在app.module.ts中,添加以下内容:

import { OverlayPortal } from 'ionic-angular/components/app/overlay-portal';
import { ClickBlock } from 'ionic-angular/components/app/click-block';
import {IonicApp as IonicAppRoot} from 'ionic-angular/components/app/app-root';

...


declarations: [
    ...

    OverlayPortal,
    IonicAppRoot,
    ClickBlock,
  ],

答案 11 :(得分:0)

以上解决方案都不适合我,但我终于解决了。

简单地将 {OverlayPortal} 导入到 app.module.ts 中,因为打字稿告诉我这样做并修改了网址。

import { OverlayPortal } from "../../node_modules/ionic-angular/components/app/overlay-portal.d";

然后将其添加到 NgModule 中的“声明”

@NgModule({
  declarations: [
     OverlayPortal

然后再次运行 ionic capacitor build android --prod,错误消失了。