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

use*_*529 5 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">
Run Code Online (Sandbox Code Playgroud)

当你做 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
Run Code Online (Sandbox Code Playgroud)

但是手动做同样的事情就可以了:

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
Run Code Online (Sandbox Code Playgroud)

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

use*_*529 7

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

我放弃了尝试这样做。使用不同的 ID 将我的更改发布到 npm 注册表要简单得多。我个人认为这是一个糟糕的机制 - 我认为 npm 注册表是一个“好的插件列表”,并且确实不应该充斥着不添加全局值的修改,但我没有找到任何选择。

所以我:

  • 将我所有已更改插件的 id 更改为originalplugin-myid-fork
  • 将它们发布到 npm 注册表
  • 更改了我的package.jsonconfig.xml仅引用这些 id,因为它们现在位于 npm 注册表中(我希望它们都同步)

背景故事(了解上下文和我尝试过的内容):

我的标准是让我的用户只需执行以下操作即可轻松安装我的软件npm install && bower install && cordova prepare

  • 问题是会在其中创建与原始插件具有相同 id 的npm install插件垫片。node_modules
  • 即使我的config.xmlpackage.json有一个spec="my fork url",无论出于何种原因,cordova prepare都会在 npm 注册表中查找该 id 并开始抱怨。
  • 事实上,npm install手动安装后cordova plugin add https://mygit.git会失败并出现相同的错误。使此手动命令再次工作的唯一方法是从node_modules.
  • 我还看到了--no-registry选项 - 永远无法让它工作 - 一直抱怨缺少本地路径。
  • 大约在这个时候,我说,并认为这不值得,让我用我的叉子弄脏注册表