【问题标题】:Failed to get absolute path to installed module无法获取已安装模块的绝对路径
【发布时间】:2017-05-08 19:56:09
【问题描述】:

我有一个问题,我认为这与我的 package.json 或 cordova 平台的版本有关。

当我尝试运行 ionic state restore 时,它会返回以下输出:

Attempting to restore your Ionic application from package.json

Restoring Platforms

cordova platform add ios
cordova platform add android

Restore platforms is complete

Restoring Plugins

cordova plugin add cordova-plugin-whitelist
cordova plugin add cordova-plugin-console
cordova plugin add cordova-plugin-statusbar
cordova plugin add cordova-plugin-device
cordova plugin add cordova-plugin-splashscreen
cordova plugin add ionic-plugin-keyboard
cordova plugin add cordova-plugin-network-information
cordova plugin add cordova-plugin-file
cordova plugin add cordova-plugin-compat
cordova plugin add cordova-plugin-media
cordova plugin add https://github.com/AubreyHewes/cordova-background-audio.git
Caught exception:
 undefined

Mind letting us know? https://github.com/driftyco/ionic-cli/issues

当我尝试运行失败的命令 (cordova plugin add https://github.com/AubreyHewes/cordova-background-audio.git) 时,它返回以下错误:

Error: Failed to fetch plugin git+https://github.com/AubreyHewes/cordova-background-audio.git 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 CLI: 7.0.0
Ionic CLI Version: 2.2.3
Ionic App Lib Version: 2.2.1
ios-deploy version: 1.9.0
ios-sim version: 5.0.10
OS: OS X El Capitan
Node Version: v7.0.0
Xcode version: Xcode 8.1 Build version 8B62

我正在为这个问题而烦恼。您知道是什么原因造成的吗?

我的 package.json 内容:

{
  "name": "paranaiba-app",
  "version": "1.1.1",
  "description": "paranaiba-app: An Ionic project",
  "dependencies": {
    "cordova-android": "^6.2.3",
    "cordova-ios": "^4.4.0",
    "cordova-plugin-compat": "~1.1.0",
    "cordova-plugin-console": "~1.0.6",
    "cordova-plugin-device": "~1.1.5",
    "cordova-plugin-file": "~4.3.2",
    "cordova-plugin-media": "~2.4.1",
    "cordova-plugin-music-controls": "git+https://github.com/homerours/cordova-music-controls-plugin.git",
    "cordova-plugin-network-information": "~1.3.2",
    "cordova-plugin-splashscreen": "~4.0.2",
    "cordova-plugin-statusbar": "~2.2.2",
    "cordova-plugin-whitelist": "~1.3.2",
    "gulp": "^3.5.6",
    "gulp-concat": "^2.2.0",
    "gulp-minify-css": "^0.3.0",
    "gulp-rename": "^1.2.0",
    "gulp-sass": "^2.0.4",
    "ionic-plugin-keyboard": "~2.2.1",
    "nl.kingsquare.cordova.background-audio": "git+https://github.com/AubreyHewes/cordova-background-audio.git",
    "phonegap-plugin-push": "~1.8.4"
  },
  "devDependencies": {
    "bower": "^1.3.3",
    "gulp-util": "^2.2.14",
    "shelljs": "^0.3.0"
  },
  "cordovaPlugins": [
    "cordova-plugin-whitelist",
    "cordova-plugin-console",
    "cordova-plugin-statusbar",
    "cordova-plugin-device",
    "cordova-plugin-splashscreen",
    "ionic-plugin-keyboard",
    "cordova-plugin-network-information",
    "cordova-plugin-file",
    "cordova-plugin-compat",
    "cordova-plugin-media",
    {
      "locator": "https://github.com/AubreyHewes/cordova-background-audio.git",
      "id": "nl.kingsquare.cordova.background-audio"
    },
    {
      "locator": "https://github.com/homerours/cordova-music-controls-plugin",
      "id": "cordova-plugin-music-controls"
    }
  ],
  "cordovaPlatforms": [
    {
      "platform": "ios",
      "version": "",
      "locator": "ios"
    },
    {
      "platform": "android",
      "version": "",
      "locator": "android"
    }
  ],
  "cordova": {
    "platforms": [
      "android",
      "ios"
    ],
    "plugins": {
      "phonegap-plugin-push": {
        "SENDER_ID": "XXXX"
      },
      "cordova-plugin-whitelist": {},
      "cordova-plugin-console": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "ionic-plugin-keyboard": {},
      "cordova-plugin-network-information": {},
      "cordova-plugin-file": {},
      "cordova-plugin-compat": {},
      "cordova-plugin-media": {},
      "nl.kingsquare.cordova.background-audio": {},
      "cordova-plugin-music-controls": {}
    }
  }
}

谢谢!

【问题讨论】:

  • 你能在纯cordova应用程序上添加这个插件来检查这个cordova的问题还是你的应用程序? cordova-7.0 中的 fetch 逻辑发生了一些变化,可能会影响您的应用。
  • @Bob 现在尝试了,效果很好:Saved plugin info for "nl.kingsquare.cordova.background-audio" to config.xml。感谢您的宝贵时间!
  • 尝试在您的 ionic 应用程序中手动从 node_modules 中删除此插件并重新安装此插件,
  • Cordova 在 node_modules 中发现安装插件前后文件之间的差异,如果没有差异并且 git repoName 与 moduleID 不同,则可能导致您收到错误。
  • 我很高兴,但无论如何,这是cordova-7.0中的错误,我会为修复它做出贡献:)

标签: git cordova ionic-framework


【解决方案1】:

我在添加本地插件时收到相同的错误消息:Error: Failed to get absolute path to installed module

使用选项--nofetch (cordova@7.0.1) 修复它:

cordova plugin add ../my-plugin --nofetch

根据https://github.com/apache/cordova-cli/blob/master/RELEASENOTES.md : 使用 --nofetch 标志使用旧的获取逻辑来获取平台和插件。

【讨论】:

  • 这应该是公认的答案。接受的答案中的链接甚至提到了这个标志。
  • --nofetch 标志是否保存到 package.json - 对我来说似乎没有,因此,在新克隆上运行 cordova prepare 会产生相同的错误。
  • --nofetch 选项在 Cordova 8.0.0 中被删除:issues.apache.org/jira/browse/CB-13055
  • 既然 --nofetch 消失了,我们还有其他选择吗?
  • 我猜降级到 7.0.1 :(
【解决方案2】:

编辑:此答案已过时。请改用answer of uutrecht


我现在遇到了同样的问题。我通过将科尔多瓦从 v7.0.0 降级到 v6.5.0 来修复它

npm i -g cordova@6.5.0

他们改变了获取插件的方式。 https://cordova.apache.org/news/2017/05/04/cordova-7.html

【讨论】:

  • 我想我会这样做的。每次我想恢复项目的状态时,我都必须手动删除所有 node_modules。感谢您的建议!
  • 如何降级cordova版本?
  • 查看我提到的命令sudo npm i -g cordova@X.X.XX.X.X 替换为您要使用的版本。
  • 感谢有关@uutrecht 答案的提示
  • 这个链接可能对我最有帮助。我将尝试 cordova config set fetch false 并希望它将其设置回版本 7 之前的行为。
【解决方案3】:

从 config.xml、package.json 和 package-lock.json 中删除您从本地安装的插件。

然后再试一次。 我为大多数情况工作。

{
    "name": "io.cordova.hellocordova",
    "version": "1.0.0",
    "displayName": "HelloCordova",
    "cordova": {
        "platforms": [
            "android"
        ],
        "plugins": {
            "cordova-plugin-whitelist": {},
            "com-example-plugin": {}
        }
    },
    "dependencies": {
        "cordova-android": "^6.2.3",
        "cordova-plugin-template": "file:../cordova-testplugin",  // <-- remove this line
        "cordova-plugin-whitelist": "^1.3.2"
    }
}

【讨论】:

    【解决方案4】:

    --nofetch 选项已在 Cordova 版本 8.0.0 中删除:https://issues.apache.org/jira/browse/CB-13055

    如果您已经安装了 Cordova 8.x.x,那么您可以将其降级到版本 7.1.0,然后使用 --nofetch 选项。

    运行以下命令将 Cordova 降级到 7.1.0:

    npm install -g cordova@7.1.0
    

    如果上述命令不起作用,请先尝试卸载cordova,然后安装cordova 7.1.0版本:

    npm uninstall -g cordova
    npm install -g cordova@7.1.0
    

    然后,检查 Cordova 版本,确认是否降级:

    cordova --version
    

    【讨论】:

    • --nofetch
    • 感谢@VarunGarg 的更正。我已经更新了答案。
    【解决方案5】:

    此答案适用于:Cordova 8.1.2 (cordova-lib@8.1.1)

    就我而言,它与 url 的 git+https://... 部分有关,在依赖项下的 package.json 中列出。将其更改为 https://... 就可以了。

    在cordova s​​rc 中,他们使用模块cordova-fetch。在函数getPath 中抛出错误。它可能会调用searchDirForTarget,而后者又会调用模块is-url。目标,例如url,在这里得到验证,git+https://... 产生无效,因为它与/^(?:\w+:)?\/\/(\S+)$/ 不匹配。

    【讨论】:

      【解决方案6】:

      我认为问题在于插件的 package.json 的 id 与 git repo 名称不同

      例如: package.json 的 id => com.abc.cde git url 必须是 https://github.com/{username}/com.abc.cde.git

      【讨论】:

        【解决方案7】:

        我修复了它运行以下命令(使用cordova v 8.1.2):

        ionic cordova plugin rm PLUGIN_NAME &amp;&amp; ionic cordova plugin add PLUGIN_NAME

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-07
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 2017-09-07
          • 2021-05-19
          • 1970-01-01
          相关资源
          最近更新 更多