Как запустить скрипты после установки пакета через Composer? - PullRequest
1 голос
/ 26 января 2020

Я использую команду composer require otra/otra:dev-develop --no-update --no-cache && composer update --no-autoloader для установки моей собственной платформы.

Я поместил этот раздел в мой composer.json из моей платформы:

"scripts": {
    "pre-install-cmd": "@composer config bin-dir bin/"
}

Но Composer делает не запускай его. Это нормально, Composer считает это зависимостью, а не пакетом root, поэтому он не позволяет моему сценарию работать?

Если это так, как я могу иметь такое же поведение?

Я хочу:

  • иметь мой двоичный файл в папке bin, а не vendor/bin без необходимости запрашивать у пользователя символическую ссылку вручную (или другое решение)
  • скопировать папку web из моей структуры в root проекта.

Редактировать: с помощью create-project команды Если я наберу composer create-project otra/otra:dev-develop crashtest --remove-vcs, Я получаю это composer.json:

{
  "name": "otra/otra",
  "type": "library",
  "description": "The OTRA PHP framework",
  "keywords": ["framework"],
  "homepage": "https://github.com/lperamo/otra",
  "license": "X11",
  "authors": [
    {
      "name": "Lionel Péramo",
      "email": "contact@lionel-peramo.com",
      "homepage": "https://wexample.com"
    }
  ],
  "bin" : ["otra.php"],
  "config": {
    "bin-dir" : "bin/",
    "sort-packages": true
  },
  "require": {
    "ext-mbstring": "*",
    "php": ">=7.4.0",
    "symfony/yaml": "^4.0"
  },
  "require-dev": {
    "ext-pdo": "*",
    "ext-pdo_mysql": "*"
  },
  "scripts": {
    "pre-install-cmd": "@composer config bin-dir bin/"
  }
}

, которое в точности совпадает с моим фреймворком, поэтому я не могу обновить его через Composer. Я мог бы с git, если я не использую --remove-vcs, но это не цель.

Вывод команды composer:

Установка otra / otra (dev -velop ab37237565155dab11812a7b2982d30ee240f051)

  • Установка otra / otra (dev -velop ab37237): клонирование ab37237565 из кеша

Создан проект в крэш-тесте

1056 * хранилища с информацией о пакете

Установка зависимостей (включая require-dev) из файла блокировки

1 Ответ

2 голосов
/ 26 января 2020

Выполняются только те сценарии, которые определены в собственном файле composer.json проекта.

Скрипты из обязательных и установленных пакетов никогда не выполняются, потому что это было бы ужасным риском для безопасности.

Это вкратце объясняется в документах :

Выполняются только сценарии, определенные в composer пакета *1028*. json. Если зависимость пакета root определяет свои собственные сценарии, Composer не выполняет эти дополнительные сценарии.

Если пользователям вашего пакета необходимо выполнить дополнительные действия для использования вашего пакета или библиотеки, объясните эти шаги в документации к вашему пакету и / или предоставляют сценарии, которые они могут выполнять вручную, и будут выполнять эти шаги для них.


Если ваш пакет является "структурой", в отличие от библиотеки, то, что вы можно воспользоваться преимуществами композиторов create-project команда .

Для этого потребуется настроить репозиторий со структурой по умолчанию для проекта, которая в свою очередь будет зависеть на вашем пакете.

Так, например, это делается с помощью Symfony Skeleton. Это не позволит вам выполнять скрипты, но позволит вам настроить рабочий проект для ваших пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...