2017-05-08 29 views
20

我遇到了一个问题,我认为这与我的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 

我不明白为什么它说这是一个连接问题,因为我的互联网连接工作得很好。此外,该插件的URL也是正确的。

我的环境信息:

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": {} 
    } 
    } 
} 

谢谢!

+0

您是否可以在纯科尔多瓦应用程序中添加此插件以检查此cordova的问题还是您的应用程序? cordova-7.0中的提取逻辑发生了一些变化,可能会影响您的应用程序。 – Bob

+0

@Bob现在就试用了,工作得很好:'将“nl.kingsquare.cordova.background-audio”的插件信息保存到config.xml中。谢谢你的时间! –

+2

尝试在离子应用程序中手动从node_modules中删除此插件并再次安装此插件, – Bob

回答

64

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

使用选项--nofetch[email protected])固定它:

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

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

+5

这应该是被接受的答案。接受答案中的链接甚至提到了这个标志。 –

+3

'--nofetch'标志是否保存为'package.json' - 它不会出现在我的面前,因此,在新克隆上运行'cordova prepare'会产生相同的错误。 – keldar

11

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


我现在有同样的问题。我固定它通过从7.0.0降级科尔多瓦V6.5.0

sudo npm i -g [email protected]

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

+0

我想我会这么做。每次我想恢复项目的状态时,都必须手动删除所有node_modules。感谢您的建议! –

+0

我该如何降级cordova版本? –

+0

看看我提到的命令'sudo npm i -g cordova @ X.X.X' 用你想使用的版本替换'X.X.X'。 – RafaelKr

-1

删除从local,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" 
    } 
}