第3方图书馆“cordova-plugin-ms-azure-mobile-apps”在我的Ionic 2应用程序中无法识别

时间:2017-02-03 04:46:58

标签: ionic2 cordova-plugins azure-mobile-services

在过去2天内无处不在(并浏览各种网站上的过去的论坛主题)并且没有解决方案之后,我作为最后的手段在这里发布。我知道每个人都很忙但是这让我很伤心。

我已尝试过一切可能,从多次创建应用程序,一次添加一个库,然后运行并确保它正常工作,然后添加另一个库,然后运行应用程序......

一切都很好,直到我添加" cordova-plugin-ms-azure-mobile-apps "在我的应用程序中我使用以下命令:

离子插件添加cordova-plugin-ms-azure-mobile-apps --save

这会在我的config.xml中添加一个条目。

然后当我尝试引用它来导入" WindowsAzure"将它放入我的TypeScript文件中,intelisense不会将该库作为一个选项,因为它将为其他库提供(如ionic-native,rxjs,momentjs等)。我把它添加到" declarations.d.ts"同样但这也没有帮助。但我仍然继续手动导入它,如下所示:

从' cordova-plugin-ms-azure-mobile-apps&#39 ;;

导入{WindowsAzure}

VS Code并没有抱怨并且"离子服务"我运行命令时也不会抱怨(在构建代码时)。但是,当应用尝试在浏览器(Chrome)中启动时,我收到运行时错误,说明无法找到模块" cordova-plugin-ms-azure-mobile-apps"

为了确保,我尝试使用"离子运行android"在我连接的Android手机上运行它。在手机上,它也会尝试启动应用程序(我按照预期的那样获得启动画面)然后屏幕全白并保持原样。将Android手机连接到笔记本电脑后,我尝试在Chrome中进行检查。它显示了相同的" 无法找到模块" cordova-plugin-ms-azure-mobile-apps "错误为" 不道德错误"。 请注意,我在手机上运行应用程序之前添加(并在代码中使用)这个库,它就像一个魅力。

为了尝试其他方式,我使用以下命令将浏览器添加为平台:

离子平台添加浏览器

然后使用以下命令运行应用程序:

离子运行浏览器

同样的行为。它没有发布。

要尝试更多,我使用命令添加了库:

npm install cordova-plugin-ms-azure-mobile-apps --save

然后它被添加到我的应用程序的package.json中"依赖关系"部分。然后,当我尝试在我的TypeScript文件中引用它时," import"我把这个库作为InteliSense选项。但最终结果仍然是一样的。我仍然得到运行时错误"找不到模块cordova-plugin-ms-azure-mobile-apps"在Chrome浏览器和Android手机上的白色空白屏幕。

如果您能帮助我解决这个问题,我将非常感谢。我迫切需要帮助,因为我已经用尽了所有选择和所有思考能力。 :(

P.S。 - 只有当我尝试使用Ionic 2应用程序时才会发生这种情况。否则,当我在一个单独的项目中使用HTML / JavaScript / Cordova / Node.js时,它可以正常工作。 :皱眉:

谢谢。

4 个答案:

答案 0 :(得分:3)

最后,让它工作!感谢Microsoft的支持!

我认为,在TypeScript世界中,这不是最好的解决方案,但这是使其发挥作用的唯一方法。

所以,我所要做的只是使用" WindowsAzure "名称空间来自" cordova-plugin-ms-azure-mobile-apps "作为常规普通的旧JavaScript变量,而不是执行" 导入"。

即,不要将WindowsAzure导入为:

从' cordova-plugin-ms-azure-mobile-apps&#39 ;;

导入{WindowsAzure}

在所有" 导入"之后,我将其声明为常规JavaScript对象。之前" @Component " class和/或" @Injectable "服务/提供者类,如:

```

import { ... } from '...';

declare var WindowsAzure: any;

@Injectable
export class ... {
    client: any;
    ....
    constructor or yourMethod(...) {
        this.client = new WindowsAzure.MobileServiceClient('http://YourAzureMobileApp.azurewebsites.net');
    }
    ....
    ....
    //Your logic
}

```

所以,显然,在Ionic 2中,如果您的第三方图书馆没有被常规" 导入"声明然后你应该尝试以旧的JavaScript方式使用它。

这是一个简单的解决方案,我最终花了两天时间。 :(

希望这可以帮助别人节省时间。

答案 1 :(得分:0)

导入第3方cordova插件,该插件未包含在Ionic Native

试试这个: 检查答案here

如果声明cordova不起作用:

ionic plugin add cordova-plugin-ms-azure-mobile-apps --save

IT应该并且正在正确安装插件。

检查

中的 plugin.xml 文件
  

插件/科尔多瓦-插件-MS-天青-移动应用   应该有一个条目:

   <js-module src="src_of_js" name="some_name">
    <clobbers target="global_object_name" />   </js-module>

通常,clobbers目标名称是加载所有cordova插件时用于插件的全局对象名称。(这通常是cordova.plugins.somename) 打字稿通常会抱怨,因为它在转换时无法找到全局变量。

只是做:

declare var global_object:any;

在您的文件中的所有其他导入之后并使用该插件。

答案 2 :(得分:0)

每当您添加第三方cordova插件时,通常会将新对象添加到窗口对象。而且您无需导入任何内容即可使用这些对象。 对于WindowsAzure插件也是如此。

在项目中添加'cordova-plugin-ms-azure-mobile-apps'后,您可以使用window.WindowsAzure来调用其功能。

注意:如果编辑或构建过程抱怨window变量,那么您可以在导入语句之后在ts文件中定义它,如下所示:

  

声明var window:any;

答案 3 :(得分:0)

以下是在离子应用中添加和使用cordova-plugin-ms-azure-mobile-apps插件的步骤。

# Create a hello world ionic v2 project
ionic start ionicv2 --v2
cd ionicv2

# Add the Cordova plugin
ionic plugin add cordova-plugin-ms-azure-mobile-apps

# Add the following 3 lines to app.component.ts
declare var WindowsAzure: any;
var client = new WindowsAzure.MobileServiceClient("https://yoursitename.azurewebsites.net");
window.alert("MobileServiceClient instance: " + client);

# Build and run for browser
ionic platform add browser
ionic run browser