Module type path [InvalidArgumentException]

Hi,
Ich bin jetzt gerade wieder dabei mir bei zu bringen ein Modul selbst zu erstellen und hänge nun wieder wie in der Oxid Schulung auch bei der composer installation des modules.

Ich habe einmal folgendes Modul genommen und dieses auch erfolgreich installiert.


Ich hab das dann kopiert und per search replace vendorID, ModulID und Namespace abgeändert
Ich habe das mal hoch geladen

Das Modul liegt aktuell unter moidules/gripgate/gg_oxid6-example-module

Zudem habe ich im Shop root composer.json folgendes stehen

{
  "name": "oxid-esales/oxideshop-project",
  "type": "project",
  "description": "This file should be used as an OXID eShop project root composer.json file. Entries provided here intended to be examples and could be changed to your specific needs.",
  "license": [
    "GPL-3.0-only",
    "proprietary"
  ],
  "minimum-stability": "stable",
  "repositories": [
    {
      "type": "composer",
      "url": "https://professional-edition.packages.oxid-esales.com/"
    },
    {
      "type": "path",
      "url": "./source/modules/gripgate/gg_oxid6-example-module"
    }
  ],
  "require": {
    "oxid-esales/oxideshop-metapackage-pe": "v6.1.0",
    "linslin/oxid6-example-module": "dev-master",
    "oxid-esales/module-generator": "dev-master",
    "gripgate/gg_oxid6-example-module": "dev-master"
  },
  "require-dev": {
    "oxid-esales/testing-library": "^v5.0.3",
    "oxid-esales/coding-standards": "^v3.0.5",
    "incenteev/composer-parameter-handler": "~v2.0",
    "oxid-esales/oxideshop-ide-helper": "^v3.1.1",
    "oxid-esales/azure-theme": "^v1.4.1"
  },
  "autoload-dev": {
    "psr-4": {
      "OxidEsales\\EshopCommunity\\Tests\\": "./vendor/oxid-esales/oxideshop-ce/tests",
      "gripgate\\oxid6ExampleModule2\\": "../../../source/modules/gripgate/gg_oxid6-example-module"
    }
  },
  "scripts": {
    "post-install-cmd": [
      "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
      "@oe:ide-helper:generate"
    ],
    "post-update-cmd": [
      "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
      "@oe:ide-helper:generate"
    ],
    "oe:ide-helper:generate": [
      "if [ -f ./vendor/bin/oe-eshop-ide_helper ]; then oe-eshop-ide_helper; fi"
    ]
  },
  "config": {
    "preferred-install": {
      "*": "dist"
    }
  },
  "extra": {
    "incenteev-parameters": {
      "file": "test_config.yml",
      "dist-file": "vendor/oxid-esales/testing-library/test_config.yml.dist",
      "parameter-key": "mandatory_parameters",
      "env-map": {
        "shop_path": "SHOP_PATH",
        "shop_tests_path": "SHOP_TESTS_PATH",
        "partial_module_paths": "PARTIAL_MODULE_PATHS"
      }
    }
  }
}

Bei der composer installation
composer require gripgate/gg_oxid6-example-module:*
composer require gripgate/gg_oxid6-example-module:dev-master
bekomme ich allerdings immer den Fehler

[InvalidArgumentException]
Could not find a matching version of package gripgate/gg_oxid6-example-module. Check the package spelling, your version constraint and that the package is available in a stability which matches
your minimum-stability (stable).

Guten Morgen,
dein Modul liegt lokal unter diesem Pfad, richtig?

Das Modul wird in dem Fall nicht als “stable” erkannt und da deine minimum-stability auf stable steht, kann er es nicht installieren. Wenn das Modul von Github gezogen wird, prüft er ob ein tag mindestens die Versionsnummer 1.0.0 hat. Da du das Modul lokal liegen hast und es somit keine tags gibt, musst du die Version in deiner composer.json einfügen. Die Version muss dann auch mindestens 1.0.0 sein, damit es als stable erkannt wird.
Hier ein Beispiel wie du die Version angeben musst:
https://github.com/Alpha-Sys/oxac_wip/blob/master/extensions/oxac_volume/composer.json

Alternativ könntest du auch die minimum-stability ändern, aber das ist nicht zu empfehlen.

Grüße
Fabian

https://black-forest-academy.de/

2 Likes

uhu… that works, thank you!!!

obwohl ich jetzt zwar keine Fehlermeldung bekomme, bin ich extrems Verwirrt warum er den Inhalt aus allen dateien raus löscht, die Dateien und die Ordnerstruktur aber bestehen bleiben wenn ich composer uptade oder composer require benutze…

zudem habe ich mein Ziel eine Klasse als Namespace zu generieren immer noch nicht erreicht.

gibt es denn kein Beispielmodul für eine locale installation mit composer ohne git.
oder ist etwa das Erste was ihr bei einer Modulentwicklung macht, eine repository registrierung das ihr das modul via git laden könnt?

Du musst dein Modul nicht zwingend in ein Git Repository legen. Du kannst in der composer.json des Shops auch angeben, wo er nach dem Modul suchen soll.
Hier ein paar Beispiele, die ich in der OXID Academy Schulung als Übung nutze (bin dort der Trainer für technische Schulungen):

Der extensions Ordner würde auf der gleichen Ebene wie source und vendor liegen. In der composer.json des Shops ist dann unter repositories der Pfad angegeben, wo das Modul liegt. So kannst du das Modul lokal in einem Ordner ablegen und bei composer update greift er auf den Ordner zu und lädt sich das Modul dort heraus.

Grüße
Fabian

https://black-forest-academy.de

Hi,
genau das versuche ich gerade
aber da bekomme ich
[RuntimeException]
/vagrant/oxideshop/vendor/my/gg_oxid6-example-module does not exist and could not be created.

https://stackoverflow.com/questions/52872752/composer-module-does-not-exist-and-could-not-be-created

aha… ok, da scheint es ein problem zu geben.
Ich habe einfach mal den vendor name ausgetausch und dann funktionierts auf einmal…
und das obwohl ich composer cache-clear gesetzt habe und auch die composer.lock gelöscht habe
zudem bin ich zwischenzeitig sogar durch gegangen und habe im vendor alles gelöscht was mit dem module zu tun hat, da composer remove nicht funktioniert
ERROR:
my/gg_oxid6-example-module:dev-master is not required in your composer.json and has not been removed
Package “my/gg_oxid6-example-module:dev-master” listed for update is not installed. Ignoring.

wenn ich den vendorname also zurück ändere, nimmt er die falschen settings von vorher?