композитор устанавливает собственное расширение TYPO3 по неправильному пути

У меня есть собственное расширение TYPO3, размещенное на bitbucket. Получение этого через композитор работает (см. Здесь для ввода). Расширение загружено в папку моего поставщика. Находясь там, я не могу установить расширение через менеджер расширений.

Как я могу поместить свой ext в typo3conf / ext (чтобы автозагрузка работала)?

Расширения, поступающие через

{
"type": "composer",
"url": "http://composer.typo3.org/"
}

собираются (как и ожидалось):

web/typo3config/ext 

вот мой проект composer.json:

{
  "repositories": [
        {
            "type": "composer",
            "url": "http://composer.typo3.org/"
        },
        {
            "type": "package",
            "package": {
                "name": "metaxos/exaibbrplus",
                "version": "dev-2016",
                "source": {
                    "url": "https://[email protected]/metaxos/exaibbrplus.git",
                    "type": "git",
                    "reference": "release/2016"
                }
            }
        }
    ],
  "name": "Metaxos/ibbrating2016",
  "require": {
    "typo3/cms": "7.6.2",
    "bk2k/bootstrap-package" : "dev-master",
    "typo3-ter/compatibility6" : "7.6.0",
    "typo3-ter/extension-builder" : "7.6.0",
    "metaxos/exaibbrplus": "dev-2016"
  },
  "extra": {
    "typo3/cms": {
      "cms-package-dir": "{$vendor-dir}/typo3/cms",
      "web-dir": "web"
    }
  }
} 

вот мое расширение composer.json:

{
  "name": "metaxos/exaibbrplus",
  "description": "custom ext for typo3",
  "type": "typo3-cms-extension",
  "version": "0.0.1",
  "require": {
    "typo3/cms-core": ">=7.6.0,<8.0"
  },
  "replace": {
    "extkey": "self.version",
    "typo3-ter/extkey": "self.version"
  },
  "autoload": {
    "psr-4": {
      "Metaxos\\Exaibbrplus\\": "Classes/"
    }
  },
  "keywords": ["custom", "ext"],
  "homepage": "http://www.blah.ch"
}

person metaxos    schedule 15.01.2016    source источник


Ответы (3)


Вам нужно добавить ключ type со значением typo3-cms-extension в корень composer.json. Это поместит ваше расширение в web/typo3conf/ext вместо vendor/$vendor/$package, что, в свою очередь, сделает его доступным для cms.

Важно знать, что если вы переопределите пакет в корневом файле composer.json как repository type package, ничего из файла composer.json расширений не будет учтено, и вам нужно будет определить любые опасения по поводу этот пакет в корне composer.json.

Итак, применяя правила, о которых я говорил выше, ваш корень composer.json будет выглядеть так:

{ "repositories": [ { "type": "composer", "url": "http://composer.typo3.org/" }, { "type": "package", "package": { "name": "metaxos/exaibbrplus", "version": "dev-2016", "type": "typo3-cms-extension", "source": { "url": "https://[email protected]/metaxos/exaibbrplus.git", "type": "git", "reference": "release/2016" }, "autoload": { "psr-4": { "Metaxos\\Exaibbrplus\\": "Classes/" } }, } } ], "name": "Metaxos/ibbrating2016", "require": { "typo3/cms": "7.6.2", "bk2k/bootstrap-package" : "dev-master", "typo3-ter/compatibility6" : "7.6.0", "typo3-ter/extension-builder" : "7.6.0", "metaxos/exaibbrplus": "dev-2016" }, "extra": { "typo3/cms": { "cms-package-dir": "{$vendor-dir}/typo3/cms", "web-dir": "web" } } }

Как упоминалось выше @helmbert, вам остается либо полностью переопределить пакет, либо использовать другой тип репозитория. Вы можете рассмотреть возможность использования satis или репозитория URL.

person Cedric Ziel    schedule 15.01.2016
comment
@Cedirc ДА! Это была недостающая часть. У меня это было только в расширении composer.json. Спасибо. - person metaxos; 15.01.2016

Чтобы Composer установил пакет в web/typo3conf/ext, пакет должен иметь тип typo3-cms-extension. В composer.json вашего расширения этот тип фактически объявлен, однако Composer не будет его уважать, потому что вы явно объявляете конфигурацию пакета на уровне проекта composer.json:

"repositories": [
  # ...
  {
    "type": "package",
    "package": {
      "name": "metaxos/exaibbrplus",
      "version": "dev-2016",
      "source": {
        "url": "https://[email protected]/metaxos/exaibbrplus.git",
        "type": "git",
        "reference": "release/2016"
      }
    }
  }
]

Поскольку вы используете "type": "package" для своего собственного репозитория, я подозреваю, что Composer игнорирует composer.json из этого пакета. Поскольку у вас уже есть репозиторий Git, содержащий composer.json, я бы предложил добавить репозиторий с помощью vcs введите вместо этого:

"repositories": [
  {
    "type": "vcs",
    "url": "https://[email protected]/metaxos/exaibbrplus.git"
  }
]

При этом Composer должен использовать composer.json из этого репозитория, распознать правильный тип пакета (typo3-cms-extension) и установить пакет в правильный каталог.

person helmbert    schedule 15.01.2016
comment
использование "type" : "vcs" приносит Запрошенный пакет metaxos / exaibbrplus не может быть найден ни в одной версии, возможно, в имени пакета есть опечатка. По-прежнему используйте "metaxos/exaibbrplus": "dev-2016" для требуемой ветки. - person metaxos; 15.01.2016
comment
В вашем вопросе вы теперь используете release/2016 в качестве имени ветки, но по-прежнему требуете dev-2016. Итак, какое имя ветки вы на самом деле используете, 2016 или release/2016? - person helmbert; 15.01.2016
comment
Мне все еще требуется dev-2016, выпуск / 2016 блока пакета удален, пожалуйста, см. Здесь - person metaxos; 15.01.2016
comment
Возможно, вам придется переместить информацию об автозагрузке в корневой файл composer.json, чтобы действительно загрузить ваши классы. Вы можете узнать больше о TYPO3 7 LTS и композиторе здесь: usetypo3.com/typo3-and-composer. html - person Daniel; 15.01.2016
comment
@Daniel, но, если я что-то не пропущу, мне все равно нужно иметь ext в typo3conf / ext, чтобы иметь возможность установить ext через EM - person metaxos; 15.01.2016

попробуйте добавить

"replace": { "exaibbrplus": "self.version", "typo3-ter/exaibbrplus": "self.version" },

И использовать только "Metaxos\\Exaibbrplus\\": "Classes/" в автозагрузчике.

person Kersten    schedule 15.01.2016
comment
извините, я скопировал старый composer.json. Я уже учел ваш вклад, все еще иду в вендор. Рассматриваемый код сейчас обновлен. - person metaxos; 15.01.2016