如何使用NPM范围的包为Cordova插件

时间:2018-04-02 12:35:44

标签: cordova npm cordova-plugins

我们正在同一个组织下开发几个NPM包:

@aerogearservices/core
@aerogearservices/core-rn
@aerogearservices/core-cordova

其中core-cordova是Cordova插件,通过依赖项安装(了解有关scoped packages的更多信息)。

相关文件:

App&#39的package.json

{
  ...
  "dependencies": {
    "@aerogearservices/core-cordova": "1.0.0",
    ...
  },
  "cordova": {
    "plugins": {},
    "platforms": ["ios", "android"]
  }
}

插件的package.json

{
  "name": "@aerogearservices/core-cordova",
  "version": "1.0.0",
  ...
  "cordova": {
    "id": "aerogearservices-core-cordova",
    "platforms": [
      "android"
    ]
  },
  "dependencies": {
    "@aerogearservices/core": "1.0.0"
  },
  "engines": {
    "cordovaDependencies": {
      ...
    }
  }
}

插件的plugin.xml

    ...     ...     Apache 2.0

<platform name="android">
    <config-file target="res/xml/config.xml" parent="/*"> 
        ...
    </config-file>

    <source-file 
        ...
    />
</platform>

插件真的什么都没做,我只是想在我的应用程序中安装它,但是当我运行cordova platform add android时,我收到了这个错误:

UnhandledPromiseRejectionWarning: CordovaError: Cannot find plugin.xml for plugin "@aerogearservices". Please try adding it again.

问题是Cordova会在myApp/plugins/aerogearservices/core-cordova下安装该插件,以便它在错误的位置寻找plugin.xml

enter image description here

作用域包和cordova插件如何协同工作?在没有重命名插件的情况下,是否有解决方法

1 个答案:

答案 0 :(得分:2)

这可能不是解决您的问题的方法,但是我最终在创建在范围npm注册表中发布的cordova插件时遇到了问题,这就是我设法解决的方法:

插件的config.xml不应提及范围:

<plugin id="cordova-plugin-myplugin" ...>
<name>cordova-plugin-myplugin</name>

另一方面,插件的package.json应该提到它:

"name": "@scope/cordova-plugin-myplugin",
"cordova": {
    "id": "@scope/cordova-plugin-myplugin",
    "platforms": [
        "android",
        "windows",
        "ios"
        ]
    },

现在,我使用

cordova plugin add @scope/cordova-plugin-myplugin

没问题

我希望这可能对某人有所帮助