Quản lý phụ thuộc thư viện mô-đun với nhà soạn nhạc


9

Tôi đã tìm thấy Phụ thuộc trong một mô-đun tùy chỉnh với trình soạn thảo drupal , Làm cách nào tôi có thể đưa thư viện của bên thứ ba vào mô-đun tùy chỉnh của mình mà không cần sử dụng Trình quản lý trình soạn thảoCách quản lý các phụ thuộc của trình soạn thảo mô-đun phụ thuộc vào câu hỏi của tôi, nhưng không dường như còn áp dụng kể từ Drupal 8.1 và sự phản đối của người quản lý Trình soạn thảo .

Ngoài ra các hướng dẫn phổ biến như Giới thiệu dứt khoát về D8 và Trình soạn thảo dường như không còn được áp dụng vì họ cũng đề cập đến trình quản lý nhà soạn nhạc.

Giải pháp khác trái ngược với trình quản lý nhà soạn nhạc, thay đổi tệp composer.json lõi có cảm giác như bị hack quá nhiều lõi và có thể sẽ bị hỏng với mỗi bản cập nhật Drush của lõi Drupal (?).

Cụ thể hơn, tôi đang cố gắng cập nhật Lượt xem vCards từ Drupal 7 lên 8. Tôi đã tạo tệp composer.json của mình như sau:

{
  "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.*"
  }
}

Nhưng nếu tôi đặt tệp composer.json trong thư mục mô-đun của mình, làm cách nào để Drupal biết rằng tệp đó có ở đó và làm cách nào để đảm bảo zipstream-phpthư viện được yêu cầu được tải xuống?

Chỉ cần chạy composer updatetừ gốc Drupal sẽ cập nhật rất nhiều phụ thuộc của Drupal, nhưng nó không bao gồm các tệp composer.json có trong các thư mục mô-đun. Tôi cũng không cho rằng tôi nên gọi composer installtừ bên trong tất cả các mô-đun với các phụ thuộc.

Làm cách nào để Drupal nhận thức được sự phụ thuộc của mô-đun mà không cần sử dụng trình quản lý nhà soạn nhạc và / hoặc cốt lõi hack?

CẬP NHẬT:

Các nhà soạn nhạc merge có plugin được sử dụng bởi lõi dường như đã hỗ trợ một con đường wildcard:

{
    "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
        }
    }
}

Tại sao không hợp nhất cốt lõi modules/*/composer.json, điều đó sẽ giải quyết mọi thứ phải không?

Cập nhật 2:

Lý do cho việc không hỗ trợ này được đề cập trong vấn đề này (hiện tại cũng đã im lặng một thời gian).


1
Chỉnh sửa tập tin tổng hợp chính là cách sửa.
Mắt

Nếu bạn để nhà soạn nhạc quản lý tất cả các phụ thuộc của bạn (bao gồm cốt lõi) thì vấn đề của bạn sẽ biến mất. Xem packagist.org/packages/drupal/core
Eyal

Đây là một tập tin tổng hợp ví dụ tôi đã viết cho một câu hỏi khác: drupal.stackexchange.com/a/187097/40011
Eyal

Cảm ơn đã trả lời @Eyal. Vì vậy, quản lý tất cả các mô-đun đóng góp thông qua composer.jsontệp là cách mới được đề xuất và drush để tải xuống và cài đặt các mô-đun đang được thay thế? Rõ ràng là nhà soạn nhạc sẽ tự động giải quyết các phụ thuộc lồng nhau và thực sự cũng tải xuống các phụ thuộc của tôi.
Neograph734

Câu trả lời:


6

Phương pháp mới sử dụng giàn giáo drupal để linh hoạt nhất

Đối với Drupal 8.4.0 trở lên khi sử dụng drush> 9.0.0 , drush make không được dùng nữa và bạn nên sử dụng quy trình làm việc của nhà soạn nhạc đầy đủ như chi tiết trong các liên kết tài liệu của drupal.org bên dưới. Các liên kết đó khuyên bạn nên sử dụng dự án soạn nhạc, nhưng điều này có thể không hoạt động cho thiết lập máy chủ web của mọi người. Sau đây là từng bước cách thiết lập composer.json theo cách thủ công để giải thích chi tiết. Các hướng dẫn liên quan đến việc thêm các mô-đun bằng tay vẫn có thể được thực hiện.

# 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

Sau đó, bạn cần thêm vào composer.json theo cách thủ công sau đây dựa trên tùy chọn của bạn vì không có cách nào để tự động làm như vậy với trình soạn thảo như hiện tại. Chúng sẽ cấu hình giàn giáo drupal để cài đặt các mô-đun của bạn ở nơi bạn muốn (trái ngược với trong nhà cung cấp / hoặc một thư mục được chọn bởi một số nhà phát triển khác). Thay đổi 'webroot' thành 'www' hoặc 'công khai' hoặc máy chủ của bạn là gì.

    "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"
    }

Bây giờ bạn có thể cài đặt một số phụ thuộc. Lưu ý rằng nhà soạn nhạc phải có khả năng sử dụng tập lệnh và plugin để làm việc này.

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

Chạy tập lệnh drupal-scaffold một lần (hoặc trên máy chủ bản dựng của bạn nếu cần):

composer drupal-scaffold

Lõi Drupal, mô-đun, chủ đề, v.v ... có thể được cài đặt theo hướng dẫn bên dưới mà không cần plugin drupal-merge-plugin.

composer require drupal/core:~8.5.1 drupal/views_vcards

Phương pháp cũ hơn sử dụng drupal-merge-plugin hoặc làm việc trực tiếp với lõi

Đối với Drupal 8.1.0 trở lên, bạn có thể sử dụng trình soạn thảo để yêu cầu các mô-đun Drupal trực tiếp. Tài liệu xoay quanh việc sử dụng Trình soạn thảo trong dự án DrupalSử dụng Trình soạn thảo để cài đặt các gói Drupal thông qua Drupal.org đã được cập nhật để tận dụng lợi thế của packagist của drupal.org. Tôi thấy nó hoạt động tốt trong một kịch bản triển khai.

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

Để phát triển, tôi nghĩ rằng việc thêm thủ công vào phụ thuộc với composer requirehoạt động tốt. Cách tiếp cận hợp nhất cũng hoạt động với plugin drupal-merge-plugin và tôi sử dụng phương pháp này cho công việc của mình.

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

Cập nhật 2016.06.22

Tôi gặp phải một vấn đề khi sử dụng drush make, trong đó đã thêm các thẻ phiên bản Drupal truyền thống và URL packagist drupal.org bằng cách sử dụng semver. Để đạt được điều đó, tôi cần chuyển sang sử dụng trình đóng gói stabler tại https://packagist.drupal-composer.org , vẫn hỗ trợ các thẻ phiên bản Drupal truyền thống.

Cũng lưu ý rằng máy chủ hoặc máy chủ bản dựng yêu cầu dung lượng bộ nhớ quá lớn để thực hiện cập nhật trình soạn thảo (hoặc yêu cầu), điều này là cần thiết trong tất cả các tình huống khi chạy cập nhật trình soạn thảo trên máy phát triển tương tự là không thể trong quy trình xây dựng của bạn.

Cập nhật 2016 / 09,23

Cập nhật 2018.03.30

  • Nhận thấy một cuộc bỏ phiếu lên. Điều này khá cũ nên đã quyết định làm rõ về sự phát triển gần đây hơn và thiết lập trang web của bạn trực tiếp với nhà soạn nhạc vì việc làm cho drush đã bị từ chối trong một thời gian.

1
Tôi vẫn rất quen với việc sử dụng drush để tải xuống và cài đặt các mô-đun, nhưng điều đó sẽ hoàn toàn được thay thế bằng trình soạn nhạc?
Neograph734

Đó là cách drupalci đang làm điều đó bây giờ, nhưng trước đó, bạn có thể sử dụng plugin hợp nhất trực tiếp. Bản vá tôi đã viết cho drupalci ban đầu là drupal.org/files/issues/2597778-composer-contrib-18.patch . Điều này đã được cam kết, nhưng bây giờ không còn trong cơ sở mã vì nó được đơn giản hóa để sử dụng trình đóng gói và làm mọi thứ từ nhà soạn nhạc iirc. Tôi cũng làm như sau với TravisCI: cgit.drupalcode.org/xero/tree/.travis.yml#n40 . Nó sẽ phụ thuộc vào dòng công việc của bạn.
mradcliffe

Có lẽ đáng để thêm một lời giới thiệu về Asset Packagist ở đây cho các thư viện của bên thứ 3 với Trình soạn thảo. Phương pháp này đang được áp dụng bởi một số phân phối Drupal và một số mô-đun đóng góp hiện đang sử dụng nó. Tôi vừa mới đóng góp một số tài liệu để chính thức hóa giải pháp này drupal.org/docs/develop/using-composer/...drupal.org/docs/develop/using-composer/...
James Wilson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.