【问题标题】:How to use NPM scoped packages for a Cordova plugin如何为 Cordova 插件使用 NPM 范围的包
【发布时间】:2018-09-11 16:17:04
【问题描述】:

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

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

core-cordova 是一个 Cordova 插件,通过依赖项安装(阅读有关 scoped packages 的更多信息)。

相关文件:

应用的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

... ... 阿帕奇 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

作用域包和cordova插件如何协同工作? 在不重命名插件的情况下有什么解决方法吗?

【问题讨论】:

  • 修补 Cordova 并提交 PR?

标签: cordova npm cordova-plugins


【解决方案1】:

这可能不是您问题的解决方案,但我最终在创建一个在作用域 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 插件添加 @scope/cordova-plugin-myplugin

我希望这实际上可以帮助某人

【讨论】:

    【解决方案2】:

    您可能已经解决了这个问题,但是 cordova@10 可以很好地处理作用域插件。

    插件的 config.xml 应该提到范围:

    <plugin id="cordova-plugin-myplugin" ...>
    <name>@scope/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
    

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 2018-09-21
      • 2015-07-14
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多