Sự khác biệt giữa cập nhật nhà soạn nhạc và cài đặt nhà soạn nhạc là gì?


Câu trả lời:


295

cập nhật nhà soạn nhạc

composer update sẽ cập nhật số tiền của bạn khi chúng được chỉ định trong composer.json

Ví dụ: nếu bạn yêu cầu gói này làm phụ thuộc:

"mockery/mockery": "0.9.*",

và bạn đã thực sự cài đặt 0.9.1phiên bản của gói, việc chạy composer updatesẽ gây ra sự nâng cấp của gói này (ví dụ: 0.9.2nếu nó đã được phát hành)

chi tiết composer updatesẽ:

  • Đọc composer.json
  • Xóa các gói đã cài đặt không còn cần thiết trong composer.json
  • Kiểm tra sự sẵn có của các phiên bản mới nhất của các gói yêu cầu của bạn
  • Cài đặt các phiên bản mới nhất của gói của bạn
  • Cập nhật composer.lockđể lưu trữ phiên bản gói đã cài đặt

cài đặt nhà soạn nhạc

composer installsẽ không cập nhật bất cứ điều gì; nó sẽ chỉ cài đặt tất cả các phụ thuộc như được chỉ định trong composer.locktệp

Chi tiết:

  • Kiểm tra nếu composer.locktập tin tồn tại (nếu không, chạy composer-updatevà tạo nó)
  • Đọc composer.locktập tin
  • Cài đặt các gói được chỉ định trong composer.locktệp

Khi nào cần cài đặt và khi nào cần cập nhật

  • composer updatePhần lớn được sử dụng trong 'giai đoạn phát triển', để nâng cấp các gói dự án của chúng tôi theo những gì chúng tôi đã chỉ định trong composer.jsontệp,

  • composer install chủ yếu được sử dụng trong 'giai đoạn triển khai' để cài đặt ứng dụng của chúng tôi trên máy chủ sản xuất hoặc trên môi trường thử nghiệm, sử dụng cùng các phụ thuộc được lưu trữ trong tệp composer.lock được tạo bởi cập nhật của nhà soạn nhạc.


5
Bạn đã không mô tả những gì sẽ xảy ra nếu chúng tôi không có tập tin khóa và cài đặt trình soạn thảo cuộc gọi. Mô tả đẹp btw.
1954544

1
Điều quan trọng có thể cắn bạn một ngày - tập tin khóa không được đệ quy. Nếu một số gói có các phụ thuộc được xác định một cách lỏng lẻo và nếu bạn tình cờ lấy một bản sao sạch của một dự án trên một máy sạch, thì nó có thể cài đặt các phiên bản khác nhau của các phụ thuộc lồng nhau, có thể bao gồm các lỗi mới hoặc thậm chí phá vỡ các thay đổi! Đặc biệt có liên quan trên tích hợp liên tục và xây dựng máy chủ. Giải pháp - săn tìm gói có vấn đề lồng nhau và thêm phiên bản tốt cố định của nó vào tệp json và khóa.
JustAMartin

composer global updatecập nhật các phụ thuộc trong kho lưu trữ toàn cầu của bạn trên hệ thống cục bộ ( COMPOSER_HOMEbiến env)
Yousha Aleayoub

1
Sau đó, làm thế nào tôi có thể cập nhật một cách cụ thể một gói cụ thể trên máy chủ sản xuất?
Michel

@Michel Trước tiên bạn nên chạy composer updatetrên hệ thống cục bộ của mình và kiểm tra ứng dụng của bạn, sau đó tải lên trình soạn thảo.lock trên máy chủ sản xuất của bạn và chạycomposer install
Amin Shojaei

58

Khi bạn chạy, composer installnó sẽ tìm tệp khóa và cài đặt bất cứ thứ gì có trong đó, nếu không tìm thấy, nó sẽ đọc composer.json, cài đặt các phụ thuộc của nó và tạo tệp khóa .

Khi bạn chạy composer updatenó chỉ cần đọc composer.json, cài đặt các phụ thuộc và cập nhật tệp khóa (hoặc tạo tệp khóa mới).


23

composer install

  1. Nếu composer.lockkhông tồn tại.
    • Xử lý và cài đặt các phụ thuộc từ composer.locktệp.
  2. Nếu composer.lockkhông không tồn tại.
    • Quy trình cài đặt gói từ composer.json.
    • Tạo composer.locktập tin dựa trên các gói đã cài đặt.

Theo composer help install::

Lệnh install đọc composer.locktệp từ thư mục hiện tại, xử lý nó, tải xuống và cài đặt tất cả các thư viện và phụ thuộc được nêu trong tệp đó. Nếu tập tin không tồn tại, nó sẽ tìm composer.jsonvà làm tương tự.


composer update

  1. Xử lý các phụ thuộc từ composer.jsontệp (cài đặt, cập nhật và xóa).
  2. Tạo hoặc cập nhật composer.locktệp theo các thay đổi.

Theo composer help update::

Lệnh cập nhật đọc composer.jsontệp từ thư mục hiện tại, xử lý tệp đó và cập nhật, xóa hoặc cài đặt tất cả các phụ thuộc.


Xem thêm: Trình soạn thảo: Đó là tất cả về tệp khóa


nhà soạn nhạc cài đặt điểm 3 không có ý nghĩa. Nếu tập tin .lock đã tồn tại, nó sẽ chỉ đọc nó và không bao giờ "cập nhật" nó. Nó chỉ được tạo nếu nó chưa tồn tại ..
Ben

@Ben Tôi đã làm rõ các điểm, cho tôi biết nếu bây giờ chúng có ý nghĩa.
kenorb

3

Sự khác biệt tốt nhất giữa composer updatecomposer install

cài đặt nhà soạn nhạc

Để thêm các phụ thuộc, bạn cần thêm thủ công vào tệp composer.json.

Nếu tệp composer.lock tồn tại, hãy cài đặt chính xác những gì được chỉ định trên tệp này

  • Nếu không hãy đọc tệp composer.json để xem những phụ thuộc nào cần được cài đặt
  • Viết composer.lock với thông tin của dự án (cài đặt phụ thuộc)

Không phải bất kỳ thành phần sẽ được cập nhật với lệnh này.

cập nhật nhà soạn nhạc

Để thêm hoặc xóa phụ thuộc, bạn cần thêm thủ công vào tệp composer.json

  • Tệp composer.lock sẽ bị bỏ qua
  • phụ thuộc tệp composer.json sẽ được cài đặt và cập nhật (nếu phụ thuộc không được cài đặt, nó sẽ được tải xuống)

Nếu bạn không thể (hoặc không biết cách thêm hoặc xóa thư viện thực sự dễ dàng, chỉ cần thêm tên của phụ thuộc và phiên bản trong thuộc tính yêu cầu của tệp) sửa đổi tệp composer.json theo cách thủ công hoặc bạn thay vào đó, hãy sử dụng dòng lệnh, trình soạn thảo có các chức năng đặc biệt cho việc này:

nhà soạn nhạc yêu cầu

Ví dụ: nếu chúng ta muốn thêm một phụ thuộc với dòng lệnh, chúng ta sẽ thực hiện đơn giản

composer require twig/twig

  • tập tin composer.json sẽ được sửa đổi tự động và phụ thuộc mới sẽ được thêm vào
  • sự phụ thuộc sẽ được tải xuống dự án

nhà soạn nhạc loại bỏ

Nếu bạn muốn loại bỏ một phụ thuộc không sử dụng, chúng tôi sẽ thực hiện đơn giản:

composer remove twig/twig --update-with-dependencies

  • Twig sẽ được loại bỏ với tất cả các phụ thuộc của mình

1

cài đặt nhà soạn nhạc

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

cập nhật nhà soạn nhạc

composer update = remove composer.lock -> composer install

Tại sao chúng ta cần 2 lệnh. Tôi nghĩ rằng nó có thể giải thích bởi composer.lock.

Hãy tưởng tượng, chúng ta KHÔNGcomposer.lockvà trong composer.json, có một sự phụ thuộc "monolog/monolog": "1.0.*"hay "monolog/monolog": "^1.0".
Sau đó, nó sẽ có một số trường hợp

  • Hôm nay chúng tôi làm việc tốt với phiên bản phụ thuộc hiện tại (ví dụ: 1.0.0) nhưng vài tháng sau, bản cập nhật phụ thuộc (ví dụ: 1.0.1) và có thể có một số lỗi
  • Một thành viên khác trong nhóm có thể có phiên bản phụ thuộc khác nếu họ chạy composer installtrong thời gian khác.

Điều gì xảy ra nếu chúng ta luôn sử dụng một phiên bản CHÍNH XÁC composer.jsonnhư vậy "monolog/monolog": "1.0.1"?
Chúng tôi vẫn cần composer.lockcomposer.jsonchỉ theo dõi phiên bản chính của sự phụ thuộc của bạn, nó không thể theo dõi phiên bản phụ thuộc của phụ thuộc.

Điều gì xảy ra nếu tất cả các phụ thuộc của phụ thuộc cũng sử dụng phiên bản CHÍNH XÁC?
Hãy tưởng tượng bạn bắt đầu với TẤT CẢ các phụ thuộc sử dụng phiên bản CHÍNH XÁC sau đó bạn không quan tâm composer.lock. Tuy nhiên, một vài tháng sau, bạn thêm một phụ thuộc mới (hoặc cập nhật phụ thuộc cũ) và các phụ thuộc của phụ thuộc này không sử dụng phiên bản CHÍNH XÁC. Sau đó, tốt hơn là quan tâm composer.lockngay từ đầu.

Bên cạnh đó, có một lợi thế của phiên bản ngữ nghĩa so với phiên bản chính xác. Chúng tôi có thể cập nhật sự phụ thuộc nhiều lần trong quá trình phát triển và thư viện thường có một số thay đổi nhỏ như sửa lỗi. Sau đó, dễ dàng hơn để nâng cấp phụ thuộc sử dụng phiên bản ngữ nghĩa.

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.