Cordova 8:如何添加不在npm注册表中的插件?

时间:2018-06-07 20:48:51

标签: cordova cordova-plugins

我有一系列未在npm注册表中发布的插件,由于各种原因,它们永远不会出现。这些存在于GitHub存储库中。

鉴于cordova 8(实际上是从7.1.0开始)已经删除了nofetch我们如何在config.xml(或package.json)中指定在用户执行时安装这些插件的cordova插件cordova prepare

实施例: 这是在package.json(以及config.xml)

 <plugin name="org.devgeeks.Canvas2ImagePlugin" spec="https://github.com/devgeeks/Canvas2ImagePlugin.git">

执行cordova prepare

Discovered plugin "org.devgeeks.Canvas2ImagePlugin" in config.xml. Adding it to the project
Failed to restore plugin "org.devgeeks.Canvas2ImagePlugin" from config.xml. You might need to try adding it again. Error: Failed to fetch plugin https://github.com/devgeeks/Canvas2ImagePlugin via registry.
Probably this is either a connection problem, or plugin spec is incorrect.
Check your connection and plugin name/version/URL.
Failed to get absolute path to installed module

然而手动做同样的事情就可以了:

cordova plugin add  https://github.com/devgeeks/Canvas2ImagePlugin.git
Installing "org.devgeeks.Canvas2ImagePlugin" for android
Installing "org.devgeeks.Canvas2ImagePlugin" for ios
Adding org.devgeeks.Canvas2ImagePlugin to package.json
Saved plugin info for "org.devgeeks.Canvas2ImagePlugin" to config.xml

此特定插件没有npm注册表。对于没有npm注册表的任何其他插件也是如此。

2 个答案:

答案 0 :(得分:4)

(并没有将此标记为答案,因为我做了与我想做的相反的事情)

我放弃了尝试这样做。使用不同的ID将更改发布到npm注册表要简单得多。我个人认为这是一个糟糕的机制 - 我认为npm注册表是一个很好的插件列表&#39;并且真的不应该被那些没有增加全局价值的修改所困扰,但我找不到任何选择。

所以我:

  • 将所有已更改的插件的ID更改为[(MyParentController *)parentVC myParentMethod];
  • 将它们发布到npm registry
  • 将我的originalplugin-myid-forkpackage.json更改为仅引用这些ID,因为它们现在位于npm注册表中(我希望它们都同步)

Backstory (对于上下文和我尝试的内容):

我的标准是让我的用户只需通过config.xml

轻松安装我的软件
  • 问题是npm install && bower install && cordova prepare会在npm install内创建插件填充程序,它与原始插件具有相同的ID。
  • 即使我的node_modulesconfig.xmlpackage.json,无论出于何种原因,spec="my fork url"都会在npm注册表中寻找该ID并开始抱怨。
  • 事实上,在执行cordova prepare之后,npm install的手动安装会因同样的错误而失败。使此手动命令再次起作用的唯一方法是从cordova plugin add https://mygit.git中删除该插件的定义。
  • 我也看到了node_modules选项 - 永远无法让它工作 - 一直抱怨错过本地路径。
  • 大约在这个时候,我说 meh 并认定它不值得,让我们用我的叉子弄脏注册表

答案 1 :(得分:0)

我遇到了同样的问题。曾经有一个选项--nofetch来安装没有package.json / npm的插件。似乎该选项已在cordova@8.0.0中删除,而没有替换。

建议here的解决方案是降级到cordova@7.1.0