32 votes

Échec de l'obtention du chemin absolu du module installé

Je rencontre un problème que je pense être lié à mon fichier package.json ou à la version de la plateforme Cordova.

Lorsque j'essaie d'exécuter un ionic state restore, voici la sortie obtenue :

Attempting to restore your Ionic application from package.json

Restoring Platforms

cordova platform add ios
cordova platform add android

La restauration des plateformes est terminée

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
Une exception a été interceptée :
 undefined

Pouvez-vous nous en informer ? https://github.com/driftyco/ionic-cli/issues

Et lorsque j'essaie d'exécuter la commande qui a échoué (cordova plugin add https://github.com/AubreyHewes/cordova-background-audio.git), voici l'erreur obtenue :

Erreur : Échec de récupération du plugin git+https://github.com/AubreyHewes/cordova-background-audio.git via le registre.
Il s'agit probablement d'un problème de connexion, ou la spécification du plugin est incorrecte.
Vérifiez votre connexion et le nom/version/URL du plugin.
Échec de l'obtention du chemin absolu du module installé

Je ne comprends pas pourquoi il mentionne un problème de connexion, car ma connexion internet fonctionne parfaitement. De plus, l'URL du plugin est correcte.

Informations sur mon environnement :

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
Version de Xcode : Xcode 8.1 Version de build 8B62

Je m'arrache les cheveux à cause de ce problème. Avez-vous une idée de ce qui pourrait en être la cause ?

Le contenu de mon fichier package.json :

{
  "name": "paranaiba-app",
  "version": "1.1.1",
  "description": "paranaiba-app: Un projet Ionic",
  "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": {}
    }
  }
}

Merci !

0 votes

Êtes-vous capable d'ajouter ce plugin sur l'application pure Cordova pour vérifier s'il s'agit d'un problème de Cordova ou de votre application? Il y a eu quelques changements dans la logique de récupération de données dans Cordova-7.0, cela affecte probablement votre application.

0 votes

@Bob l'a essayé tout de suite, et cela a très bien fonctionné : Informations du plugin "nl.kingsquare.cordova.background-audio" enregistrées dans config.xml. Merci pour votre temps!

3 votes

Essayez de supprimer ce plugin manuellement du dossier node_modules de votre application Ionic et réinstallez ce plugin à nouveau,

77voto

uutecht Points 786

J'ai reçu le même message d'erreur en ajoutant un plugin local: Erreur : Impossible d'obtenir le chemin absolu vers le module installé.

L'utilisation de l'option --nofetch (cordova@7.0.1) a résolu le problème :

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

Selon https://github.com/apache/cordova-cli/blob/master/RELEASENOTES.md : Utilisez le drapeau --nofetch pour télécharger les plateformes et les plugins en utilisant l'ancienne logique de téléchargement.

5 votes

Ceci devrait être la réponse acceptée. Le lien dans la réponse acceptée mentionne même ce drapeau.

3 votes

La balise --nofetch enregistre-t-elle dans le fichier package.json - cela ne semble pas être le cas pour moi, et en conséquence, l'exécution de cordova prepare sur un clone frais produit la même erreur.

0 votes

@keldar as-tu réussi à le faire fonctionner avec cordova prepare? J'ai obtenu le même message d'erreur en ajoutant un plugin local.

13voto

RafaelKr Points 648

Modifier : Cette réponse est obsolète. Veuillez utiliser la réponse de uutrecht à la place.


J'avais le même problème tout à l'heure. Je l'ai résolu en rétrogradant cordova de la version 7.0.0 à la version 6.5.0

npm i -g cordova@6.5.0

Ils ont changé la manière dont ils récupèrent les plugins. https://cordova.apache.org/news/2017/05/04/cordova-7.html

0 votes

Je pense que je vais le faire. Chaque fois que je veux restaurer l'état du projet, je dois supprimer manuellement tous les node_modules. Merci pour la suggestion!

0 votes

Comment puis-je rétrograder la version de Cordova ?

0 votes

Regardez la commande que j'ai mentionnée sudo npm i -g cordova@X.X.X Remplacez X.X.X par la version que vous souhaitez utiliser.

5voto

wf9a5m75 Points 2709

Supprimez le plugin que vous avez installé localement du config.xml, du package.json et du package-lock.json.

Ensuite, réessayez. Cela fonctionne dans la plupart des cas.

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

5voto

chapagain Points 6536

L'option --nofetch a été supprimée dans la version 8.0.0 de Cordova : https://issues.apache.org/jira/browse/CB-13055

Si vous avez déjà installé Cordova 8.x.x, vous pouvez le rétrograder en version 7.1.0, puis utiliser l'option --nofetch.

Exécutez la commande suivante pour rétrograder Cordova en 7.1.0 :

npm install -g cordova@7.1.0

Si la commande ci-dessus ne fonctionne pas, essayez d'abord de désinstaller cordova, puis installez la version 7.1.0 de cordova :

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

Ensuite, vérifiez la version de Cordova pour confirmer qu'elle a été rétrogradée ou non :

cordova --version

0 votes

Il est --nofetch

0 votes

Merci @VarunGarg pour la correction. J'ai mis à jour la réponse.

1voto

Erik Points 134

Cette réponse s'applique à : Cordova 8.1.2 (cordova-lib@8.1.1)

Dans mon cas, cela avait à voir avec la partie git+https://... de l'URL, répertoriée dans package.json sous les dépendances. Le fait de la changer en https://... a résolu le problème.

Dans le code source de Cordova, ils utilisent un module cordova-fetch. Dans la fonction getPath, l'erreur est levée. Cela pourrait appeler searchDirForTarget qui, à son tour, appelle le module is-url. La cible, par exemple l'URL, est validée ici et git+https://... est invalide car cela ne correspond pas à /^(?:\w+:)?\/\/(\S+)$/.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X