การจัดการการพึ่งพาไลบรารีโมดูลด้วยผู้แต่ง


9

ฉันได้พบการอ้างอิงในโมดูลกำหนดเองด้วย Drupal-นักแต่งเพลง , ฉันจะ ได้แก่ ห้องสมุดของบุคคลที่สามในโมดูลของฉันเองโดยไม่ต้องใช้ผู้จัดการนักแต่งเพลงและวิธีการจัดการ contrib โมดูลพึ่งพานักแต่งเพลงใน Drupal 8ซึ่งได้รับการ releated คำถามของฉัน แต่ไม่มี ไม่ดูเหมือนจะใช้ตั้งแต่ Drupal 8.1 และการเลิกใช้งานของผู้จัดการนักแต่งเพลง

คู่มือที่เป็นที่นิยมเช่นการแนะนำที่ชัดเจนสำหรับ D8 และนักแต่งเพลงดูเหมือนจะไม่ได้ใช้อีกต่อไปเนื่องจากพวกเขายังพูดถึงผู้จัดการนักแต่งเพลง

อีกวิธีหนึ่งที่ตรงข้ามกับผู้จัดการผู้แต่งเปลี่ยนไฟล์ core composer.json ให้ความรู้สึกเหมือนแฮ็คหลักมากเกินไปและอาจทำลายการอัพเดท Drupal core ทุกครั้งของ Drush

โดยเฉพาะอย่างยิ่งฉันพยายามอัปเดตViews vCardsจาก Drupal 7 เป็น 8 ฉันได้สร้างไฟล์ 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 updateจากรูทของ Drupal จะทำการอัพเดตการพึ่งพาของ Drupal จำนวนมาก แต่ไม่รวมไฟล์ composer.json ที่อยู่ในโฟลเดอร์โมดูล ฉันยังไม่คิดว่าฉันควรจะโทรcomposer installจากภายในโมดูลทั้งหมดที่มีการอ้างอิง

ฉันจะทำให้ Drupal รับรู้ถึงการพึ่งพาโมดูลได้อย่างไรโดยไม่ต้องใช้ผู้จัดการผู้แต่งและ / หรือแฮ็คคอร์

UPDATE:

ผสานนักแต่งเพลงปลั๊กอินที่ใช้โดยหลักดูเหมือนจะได้รับการสนับสนุนจากเส้นทางสัญลักษณ์แทน:

{
    "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 ดังนั้นการจัดการโมดูล contrib ทั้งหมดผ่านทางcomposer.jsonไฟล์จึงเป็นวิธีที่แนะนำและ drush สำหรับการดาวน์โหลดและการติดตั้งโมดูลกำลังได้รับการแทนที่? ผู้แต่งจะเห็นได้ชัดว่าจะแก้ไขการอ้างอิงที่ซ้อนกันโดยอัตโนมัติและจะดาวน์โหลดการอ้างอิงของฉันด้วย
Neograph734

คำตอบ:


6

วิธีการใหม่ที่ใช้ drupal-scaffold เพื่อความยืดหยุ่นสูงสุด

สำหรับ Drupal 8.4.0 และสูงกว่าโดยใช้ drush> 9.0.0 drush make ถูกเลิกใช้แล้วและคุณควรใช้ขั้นตอนการทำงานของนักแต่งเพลงแบบเต็มตามรายละเอียดในลิงก์เอกสารของ drupal.org ด้านล่าง ลิงก์เหล่านั้นแนะนำให้ใช้โปรเจ็กต์ผู้แต่ง แต่นี่อาจไม่เหมาะกับการตั้งค่าเว็บเซิร์ฟเวอร์ของทุกคน ต่อไปนี้เป็นขั้นตอนวิธีการตั้งค่า 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.json ด้วยตนเองต่อไปนี้ตามการตั้งค่าของคุณเพราะไม่มีวิธีการทำเช่นนั้นโดยอัตโนมัติด้วยผู้แต่งตามที่เป็น สิ่งเหล่านี้จะกำหนดค่า drupal-scaffold เพื่อติดตั้งโมดูลของคุณที่คุณต้องการ (ตรงข้ามกับในผู้ขาย / หรือไดเรกทอรีที่เลือกโดยนักพัฒนาอื่น ๆ ) เปลี่ยน 'webroot' เป็น 'www' หรือ 'สาธารณะ' หรือโฮสต์ของคุณคืออะไร

    "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 หนึ่งครั้ง (หรือบนเซิร์ฟเวอร์ build ของคุณตามต้องการ):

composer drupal-scaffold

แกน Drupal, โมดูล, ธีม, ฯลฯ ... สามารถติดตั้งได้ตามคำแนะนำด้านล่างโดยไม่ต้องใช้ drupal-merge-plugin

composer require drupal/core:~8.5.1 drupal/views_vcards

วิธีที่เก่ากว่าใช้ drupal-merge-plugin หรือทำงานกับคอร์โดยตรง

สำหรับ Drupal 8.1.0 และสูงกว่าคุณสามารถใช้ผู้แต่งเพื่อต้องการโมดูล Drupal โดยตรง เอกสารเกี่ยวกับการใช้ Composer ในโครงการ Drupalและการใช้ Composer เพื่อติดตั้งแพคเกจ Drupal ผ่าน Drupal.orgได้รับการอัปเดตเพื่อใช้ประโยชน์จากผู้บรรจุหีบห่อของ drupal.org ฉันคิดว่ามันใช้งานได้ดีในสถานการณ์การปรับใช้

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

สำหรับการพัฒนาฉันคิดว่าการเพิ่มการพึ่งพาด้วยตนเองcomposer requireทำงานได้ดี วิธีการผสานก็ใช้งานได้กับ drupal-merge-plugin และฉันก็ใช้มันเพื่อ drush ทำให้กระบวนการทำงาน

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ซึ่งยังคงรองรับแท็กเวอร์ชันดั้งเดิมของ Drupal

นอกจากนี้โปรดทราบว่าบิลด์เซิร์ฟเวอร์หรือเครื่องต้องการหน่วยความจำจำนวนมากเพื่อทำการอัพเดทผู้แต่ง (หรือจำเป็น) ซึ่งจำเป็นในทุกสถานการณ์ที่การรันการอัพเดทผู้แต่งบนเครื่องพัฒนาที่คล้ายกันเป็นไปไม่ได้ในกระบวนการสร้างของคุณ

อัพเดท 2016.09.23

อัปเดต 2018.03.30

  • สังเกตเห็นการลงคะแนน นี่ค่อนข้างเก่าดังนั้นจึงตัดสินใจที่จะชี้แจงเกี่ยวกับการพัฒนาเมื่อเร็ว ๆ นี้และตั้งค่าไซต์ของคุณโดยตรงกับผู้แต่งเพลงเนื่องจากเลิกทำมาแล้ว (เศร้า) เลิกใช้ไประยะหนึ่ง

1
ฉันยังคงคุ้นเคยกับการใช้ drush เพื่อดาวน์โหลดและติดตั้งโมดูล แต่จะถูกแทนที่ด้วยตัวแต่งเพลงทั้งหมดหรือไม่
Neograph734

นั่นคือวิธีที่ drupalci กำลังทำอยู่ตอนนี้ แต่ก่อนหน้านั้นคุณสามารถใช้ปลั๊กอินผสานโดยตรง แพทช์ที่ผมเขียนสำหรับ drupalci แรกคือdrupal.org/files/issues/2597778-composer-contrib-18.patch สิ่งนี้เกิดขึ้นแล้ว แต่ตอนนี้ไม่ได้อยู่ในฐานรหัสอีกต่อไปเพราะมันง่ายต่อการใช้นักทำหีบห่อและทำทุกอย่างจากนักแต่งเพลง iirc ฉันยังทำต่อไปนี้ด้วย TravisCI: cgit.drupalcode.org/xero/tree/.travis.yml#n40 มันจะขึ้นอยู่กับกระบวนการทำงานของคุณ
mradcliffe

อาจคุ้มค่าที่จะเพิ่มความกระจ่างเกี่ยวกับ Asset Packagist ที่นี่สำหรับห้องสมุดบุคคลที่สามด้วย Composer วิธีการนี้ถูกนำไปใช้โดย Drupal distros และมีโมดูล contrib จำนวนมากที่ใช้งานเช่นกัน ฉันเพิ่งได้มีส่วนร่วมในการจัดทำเอกสารเพื่อแก้ปัญหานี้อย่างเป็นทางการdrupal.org/docs/develop/using-composer/ …และdrupal.org/docs/develop/using-composer/ …
JamesWilson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.