composer로 모듈 라이브러리 종속성 관리


9

내가 발견 한 드루팔 - 작곡가와 사용자 정의 모듈 종속성 , 내가 작곡가 관리자를 사용하지 않고 내 사용자 정의 모듈에서 타사 라이브러리를 포함 할 수 있습니다 방법드루팔 (8)에있는 contrib 모듈 작곡가 종속성 관리하는 방법에 내 질문에 releated 있습니다,하지만 Drupal 8.1 및 Composer 관리자 의 지원 중단 이후 더 이상 적용되는 것 같습니다 .

또한 D8 및 Composer에 대한 명확한 소개 와 같은 인기있는 가이드 는 작곡가 관리자를 언급하기 때문에 더 이상 적용되지 않는 것으로 보입니다.

작곡가 관리자와 반대되는 다른 솔루션은 핵심 작곡가를 변경합니다.

보다 구체적으로, Drupal 7에서 8로 Views vCard 를 업데이트하려고 합니다. 다음과 같이 composer.json 파일을 만들었습니다.

{
  "name": "drupal/views_vcards",
  "description": "Allows creation of vCards using the fields provided by the Views module.",
  "type": "drupal-module",
  "license": "GPL-2.0+",
  "homepage": "https://drupal.org/project/views_vcards",
  "require": {
    "maennchen/zipstream-php": "0.3.*"
  }
}

그러나 composer.json 파일을 모듈 폴더에 넣으면 Drupal이 해당 파일이 있음을 어떻게 알 수 있으며 필요한 zipstream-php라이브러리가 다운로드 되었는지 어떻게 확인할 수 있습니까?

composer updateDrupal 루트에서 실행하면 Drupal 종속성이 많이 업데이트되지만 모듈 폴더에있는 composer.json 파일은 포함되지 않습니다. 또한 composer install종속성이있는 모든 모듈 내부에서 전화해야한다고 가정하지 않습니다 .

작성기 관리자 및 / 또는 해킹 코어를 사용하지 않고 Drupal이 모듈의 종속성을 인식하도록하려면 어떻게해야합니까?

최신 정보:

작곡가 병합은 코어에서 사용하는 플러그인이 와일드 카드 경로를 지원하는 것 같습니다 :

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json" // < ---- THIS LINE
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "merge-dev": true,
            "merge-extra": false
        }
    }
}

핵심 병합이 아닌 이유는 무엇 modules/*/composer.json입니까?

업데이트 2 :

이것을 지원하지 않는 이유는 이 문제 에서 다루고 있습니다 (이는 또한 얼마 동안 조용했습니다).


1
메인 작곡가 파일을 수정하는 것이 올바른 방법입니다.
Eyal

작곡가가 모든 종속성 (핵심 포함)을 관리하게하면 문제가 사라집니다. 참조 packagist.org/packages/drupal/core
Eyal 님

다음은 또 다른 질문에 대해 작성한 작곡가 파일의 예입니다. drupal.stackexchange.com/a/187097/40011
Eyal

@Eyal 답장을 보내 주셔서 감사합니다. 따라서 composer.json파일을 통해 모든 contrib 모듈을 관리하는 것이 새로운 권장 방법이며 모듈을 다운로드하고 설치하는 데 어려움을 겪고 있습니까? 분명히 작곡가는 중첩 된 종속성을 자동으로 해결하고 실제로 종속성을 다운로드합니다.
Neograph734

답변:


6

최고의 유연성을 위해 드루팔 스캐 폴드를 사용하는 새로운 방법

drush> 9.0.0을 사용하는 Drupal 8.4.0 이상의 경우 drush make는 더 이상 사용되지 않으며 아래 drupal.org 문서 링크에 설명 된대로 전체 작성기 작업 흐름을 사용해야합니다. 이러한 링크는 composer 프로젝트 사용을 권장하지만 모든 사람의 웹 서버 설정에서 작동하지 않을 수 있습니다. 다음은 자세한 설명을 위해 composer.json을 수동으로 설정하는 방법에 대한 단계별 설명입니다. 수동으로 모듈을 추가하는 방법에 대한 지침은 여전히 ​​수행 할 수 있습니다.

# Initialize composer. Stability alpha is important for custom modules that may be source managed outside of packagist or drupal.org
composer init --name myvendor/mysite --stability=alpha --license=GPLv2
composer config repositories.drupal composer https://packages.drupal.org/8
composer config discard-changes true

그런 다음 composer를 그대로 자동으로 수행 할 수있는 방법이 없으므로 환경 설정에 따라 다음을 수동으로 composer.json에 추가해야합니다 . 이들은 drupal-scaffold를 구성하여 원하는 위치에 모듈을 설치합니다 (공급 업체 또는 다른 개발자가 선택한 디렉토리와 반대). 'webroot'를 'www'또는 'public'또는 호스트 상태로 변경하십시오.

    "extra": {
        "installer-paths": {
            "webroot/core": ["type:drupal-core"],
            "webroot/modules/contrib/{$name}": ["type:drupal-module"],
            "webroot/modules/custom/{$name}": ["type:drupal-custom-module"],
            "webroot/themes/contrib/{$name}": ["type:drupal-theme"],
            "webroot/themes/custom/{$name}": ["type:drupal-custom-theme"],
            "webroot/profiles/{$name}": ["type:drupal-profile"],
            "webroot/libraries/{$name}": ["type:drupal-library"]
        },
        "patches": {}
    },
    "scripts": {
        "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
    }

이제 일부 종속성을 설치할 수 있습니다. 이 작업을 수행하려면 작곡가가 스크립트와 플러그인을 사용할 수 있어야합니다.

composer require composer/installers:^1.4.0 drupal-composer/drupal-scaffold:^2.3.0 cweagans/composer-patches:^1.6.2

drupal-scaffold 스크립트를 한 번 (또는 필요에 따라 빌드 서버에서) 실행하십시오.

composer drupal-scaffold

Drupal-merge-plugin없이 Drupal 코어, 모듈, 테마 등을 아래 지침에 따라 설치할 수 있습니다.

composer require drupal/core:~8.5.1 drupal/views_vcards

drupal-merge-plugin을 사용하거나 직접 코어를 사용하는 오래된 방법

Drupal 8.1.0 이상의 경우 작곡가를 사용하여 Drupal 모듈을 직접 요구할 수 있습니다. Drupal 프로젝트에서 Composer 사용Drupal.org통해 Drupal 패키지를 설치하기 위해 Composer 사용에 관한 문서가 drupal.org의 패키지를 활용 하도록 업데이트되었습니다. 배포 시나리오에서 이미 잘 작동한다는 것을 알았습니다.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require drupal/views_vcards

개발을 위해서는 종속성을 수동으로 추가하는 것이 composer require좋습니다. 병합 접근법은 drupal-merge-plugin에서도 작동하며 drush make 작업 흐름에 사용합니다.

composer config repositories.drupal composer https://packages.drupal.org/8
composer require mile23/drupal-merge-plugin
composer update

2016.06.22 업데이트

drush make를 사용하여 문제가 발생하여 기존 Drupal 버전 태그와 drupal.org packagist URL을 semver를 사용하여 추가했습니다. 이를 위해 https://packagist.drupal-composer.org 에서 안정적인 Dragal 버전 태그를 계속 지원하는 안정된 패키지를 사용하도록 전환해야했습니다 .

또한 빌드 서버 또는 시스템 에는 작성기 업데이트를 수행하기 위해 엄청난 양의 메모리가 필요합니다 . 이는 빌드 프로세스에서 유사한 개발 시스템에서 작성기 업데이트를 실행할 수없는 모든 시나리오에서 필요합니다.

2016.09.23 업데이트

2018.03.30 업데이트

  • 상향 투표에 주목했습니다. 이것은 꽤 오래되어서 최근에 개발이 더 명확 해지고 drush make가 (슬프게도) 한동안 사용되지 않아 작곡가와 직접 사이트를 설정하기로 결정했습니다.

1
drush를 사용하여 모듈을 다운로드하고 설치하는 데 여전히 익숙하지만 작곡가로 완전히 대체됩니까?
Neograph734

그것이 drupalci가 지금하고있는 방법이지만 그 전에는 병합 플러그인을 직접 사용할 수 있습니다. 내가 drupalci를 위해 작성한 패치는 처음에 drupal.org/files/issues/2597778-composer-contrib-18.patch였습니다 . 이것은 커밋되었지만 packagist를 사용하고 composer iirc에서 모든 것을 수행하는 것이 단순화되어 더 이상 코드베이스에 없습니다. 또한 TravisCI로 cgit.drupalcode.org/xero/tree/.travis.yml#n40을 사용 합니다. 작업 흐름에 따라 다릅니다.
mradcliffe

Composer를 사용하는 타사 라이브러리의 Asset Packagist에 대한 설명을 추가 할 가치가 있습니다. 이 방법론은 많은 Drupal 배포판에 의해 채택되고 있으며 현재 몇 가지 contrib 모듈에서도 사용되고 있습니다. 난 그냥이 솔루션 officialize 몇 가지 문서에 기여했습니다 drupal.org/docs/develop/using-composer/...을 하고 drupal.org/docs/develop/using-composer/...
제임스 윌슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.