Làm cách nào để cập nhật một thư viện với Trình soạn thảo?


311

Tôi chỉ cần cài đặt 1 gói cho bản phân phối SF2 của mình (DoctrineFixenses).

Khi tôi chạy

php composer.phar update

tôi có

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Nó xuất hiện nhà phát triển cuối cùng chỉnh sửa rất nhiều tập tin bên trong nhà cung cấp.

Để giải quyết vấn đề này, tôi đã thử

php composer.phar update <package_name>

Nhưng điều đó dường như không hoạt động. Làm cách nào tôi có thể cập nhật / cài đặt chỉ một thư viện từ composer.json?


Bạn đang sử dụng lệnh đúng. Bạn có thể chỉ cho chúng tôi composer.json?
cheesemacfly

vui lòng thử với các lệnh được cung cấp trong câu trả lời của tôi nếu không, vui lòng cung cấp mô tả về lỗi bạn gặp phải (tức là đầu ra của nhà soạn nhạc nếu nhà soạn nhạc phàn nàn)
Nicolai Fröhlich

Composer.json của bạn có thể đề cập đến một ngã ba thay thế của dự án.
iconoclast

Tôi đã cập nhật một phụ thuộc cụ thể trong dự án laravel của mình và chỉ định thành phần cụ thể để cài đặt rõ ràng: trình soạn thảo cập nhật laravelcollective / html. Điều đó dường như làm việc.
marko

Câu trả lời:


526

Để cài đặt doctrine/doctrine-fixtures-bundlevới phiên bản 2.1.*và độ ổn định tối thiểu, hãy @devsử dụng:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

sau đó chỉ cập nhật gói duy nhất này:

composer.phar update doctrine/doctrine-fixtures-bundle

9
Có thể hữu ích: chạy cập nhật / cài đặt với -vvv (chế độ dài dòng: composer.phar update -vvv gói / gói) đôi khi có thể tốt hơn vì đôi khi một dấu nhắc tương tác sẽ xuất hiện có thể bị ẩn
timhc22

1
Nếu có lỗi trên các gói khác thì sao? (Trong trường hợp của tôi dừng cài đặt).
Thomas Decaux

2
Điều gì về yêu cầu kích hoạt một bản cập nhật của một gói khác nhau?
hakre

1
chính xác những gì bạn muốn biết? bạn có thể được specfic hơn xin vui lòng? Bạn có muốn biết rằng có thể xảy ra một gói khác - rõ ràng requirelà trước đó hoặc được tải xuống dưới dạng phụ thuộc - sẽ tự động được cập nhật khi chạy composer require <package>:<version-constraint>@<stability-flag>lệnh không?
Nicolai Fröhlich

7
> composer.phar cập nhật học thuyết / học thuyết-đồ đạc-gói này cũng cập nhật tất cả các gói khác (((
podarok

184

Nếu bạn chỉ muốn cập nhật một vài gói và không phải tất cả, bạn có thể liệt kê chúng như sau:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Bạn cũng có thể sử dụng ký tự đại diện để cập nhật một loạt các gói cùng một lúc:

php composer.phar update vendor/*
  • --prefer-source : Cài đặt các gói từ sourcekhi có sẵn.
  • --prefer-dist : Cài đặt các gói từ distkhi có sẵn.
  • --ignore-platform-reqs : bỏ qua php, hhvm, lib-*ext-*các yêu cầu và buộc các cài đặt ngay cả khi máy tính cục bộ không đáp ứng này. Xem thêm platform tùy chọn cấu hình .
  • --dry-run : Mô phỏng lệnh mà không thực sự làm gì.
  • --dev : Cài đặt các gói được liệt kê trong require-dev(đây là hành vi mặc định).
  • --no-dev : Bỏ qua các gói cài đặt được liệt kê trong require-dev. Thế hệ autoloader bỏ qua các autoload-devquy tắc.
  • --no-autoloader : Bỏ qua việc tạo autoloader.
  • --no-scripts : Bỏ qua việc thực thi các tập lệnh được xác định trong composer.json.
  • --no-plugins : Tắt các plugin.
  • --no-tiến trình : Loại bỏ hiển thị tiến trình có thể gây rối với một số thiết bị đầu cuối hoặc tập lệnh không xử lý các ký tự backspace.
  • --optizes-autoloader (-o) : Chuyển đổi tự động tải PSR-0/4 sang sơ đồ lớp để có được trình tải tự động nhanh hơn. Điều này được khuyến nghị đặc biệt cho sản xuất, nhưng có thể mất một chút thời gian để chạy vì vậy hiện tại nó không được thực hiện theo mặc định.
  • --lock : Chỉ cập nhật hàm băm tệp khóa để chặn cảnh báo về tệp khóa đã hết hạn.
  • --with-Depencies : Thêm tất cả các phụ thuộc của các gói trong danh sách trắng vào danh sách trắng.
  • --prefer-ổn định : Thích các phiên bản phụ thuộc ổn định.
  • --prefer-low : Thích các phiên bản phụ thuộc thấp nhất. Hữu ích để thử nghiệm các phiên bản tối thiểu của yêu cầu, thường được sử dụng với --prefer-stable.

Xin lưu ý rằng người dùng ZSH có thể cần phải đóng vendor/*dấu ngoặc kép của họ :composer update "vendor/*"
ZeroThe2nd

51

Sự khác biệt giữa cài đặt, cập nhật và yêu cầu

Giả sử kịch bản sau đây:

composer.json

"parsecsv/php-parsecsv": "0.*"

tập tin composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

Phát hành mới nhất là 1.1.0. Bản 0.*phát hành mới nhất là0.3.2

Tải về: composer install parsecsv/php-parsecsv

Điều này sẽ cài đặt phiên bản 0.1.4như được chỉ định trong tập tin khóa

cập nhật: composer update parsecsv/php-parsecsv

Điều này sẽ cập nhật các gói để 0.3.2. Phiên bản cao nhất liên quan đến composer.json của bạn. Các mục trong composer.locksẽ được cập nhật.

yêu cầu: composer require parsecsv/php-parsecsv

Điều này sẽ cập nhật hoặc cài đặt phiên bản mới nhất 1.1.0. Bạn composer.locktập tin và composer.jsontập tin sẽ được cập nhật là tốt.


thật tuyệt vời, vì vậy, để làm mới một gói trong phiên bản bị hạn chế composer update author/packagevà sau đócomposer install author/package
William Randokun

@WilliamRandokun nếu bạn đã cài đặt nó trước đó, vậy composer update packagelà đủ, không cần phải gọi cài đặt sau nó
Adam

1
chính xác những gì tôi đang tìm kiếm. giải thích tốt. upvoted
kapitan

14

Về cơ bản bạn cũng có thể làm theo một để cài đặt gói mới.

php composer.phar require

sau đó terminal sẽ yêu cầu bạn nhập tên của gói để tìm kiếm.

$ Search for a package []: //Your package name here

Sau đó, terminal sẽ hỏi phiên bản của gói (Nếu bạn muốn có phiên bản mới nhất, hãy để trống)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Sau đó, bạn chỉ cần nhấn phím quay lại. Terminal sẽ yêu cầu một gói khác, nếu bạn không muốn cài đặt gói khác, chỉ cần nhấn phím quay lại và bạn sẽ hoàn tất.


6

Bạn có thể sử dụng lệnh sau để cập nhật bất kỳ mô-đun nào với các phụ thuộc của nó

composer update vendor-name/module-name --with-dependencies

5

Để đảm bảo rằng trình soạn thảo cập nhật một gói đã được cài đặt lên phiên bản cuối cùng trong các ràng buộc phiên bản bạn đã đặt trong composer.json, hãy xóa gói khỏi nhà cung cấp và sau đó thực thi:

php composer.phar update vendor/package

4
Bạn sẽ tìm thấy đề xuất tương tự trong bài đăng này: github.com/composer/composer/issues/3112 . PS: Bỏ phiếu mà không có lời giải thích rất dễ làm và vô dụng.
Tsounabe

5

Chỉ dùng

composer require {package/packagename}

giống

composer require phpmailer/phpmailer

nếu gói không có trong thư mục nhà cung cấp .. nhà soạn nhạc cài đặt nó và nếu gói tồn tại gói cập nhật của nhà soạn nhạc lên phiên bản mới nhất.


2

Bởi vì bạn muốn cài đặt gói cụ thể "Tôi chỉ cần cài đặt 1 gói cho bản phân phối SF2 của mình (DoctrineFixenses)."

php composer.phar require package/package-name:package-version sẽ là đủ

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.