Những lệnh biên dịch nào là cần thiết trong chế độ nhà phát triển và khi nào?


24

Ai đó có thể cho tôi hướng dẫn khi chạy lệnh biên dịch nào trong chế độ nhà phát triển Magento 2 không? Tôi không chắc là tôi đã hiểu đúng chưa.

Trong devdocs, chế độ nhà phát triển được mô tả như sau:

  • Các tập tin xem tĩnh không được lưu trữ; chúng được ghi vào thư mục tĩnh / thư mục tĩnh Magento mỗi khi chúng được gọi

Điều đó có nghĩa là, mỗi tệp riêng lẻ trong pub / static được tạo khi được yêu cầu và bạn không bao giờ cần phải gọi setup:static-content:deploy? Điều này mâu thuẫn với kinh nghiệm của tôi. Hoặc tôi có thể xóa bất kỳ tập tin và chúng sẽ được tạo lại? Ngoài ra, hình ảnh, tệp CSS và tệp JS dường như được xử lý khác nhau.

Trang tài liệu chế độ nhà phát triển không nói gì về biên dịch mã, nhưng tôi nghĩ cũng có một sự khác biệt, vì vậy không cần thiết phải chạy setup:di:compilesau tất cả các thay đổi trong di.xmltệp. Điều này có đúng không và nếu vậy, việc tạo mã hoạt động như thế nào trong chế độ nhà phát triển?

Nói cách khác: cache sang một bên, tôi cần chạy lệnh nào sau khi thay đổi?

Câu trả lời:


27

chú ý: Tôi đã trải nghiệm rằng trong chế độ nhà phát triển, việc xóa pub/staticsẽ phá vỡ cơ chế vì bạn thoát khỏi .htaccesstệp tạo ra phép thuật trong thư mục đó.

Nếu bạn giữ pub/static/.htaccesstệp ở chế độ nhà phát triển, bạn không cần chạy bất kỳ lệnh biên dịch nào: Magento sẽ tạo liên kết tượng trưng cho tệp ngay khi chúng được yêu cầu. Điều đó có nghĩa là những thay đổi đối với tài sản tĩnh sẽ hiển thị ngay lập tức, miễn là bạn cũng bị tắt bộ đệm.

Bạn có thể xóa pub/static/frontendhoặc pub/static/adminhtmlthay vào đó.

Trong chế độ mặc định, tài sản được vật chất hóa trong pub/staticthư mục con, nghĩa là chúng được tạo (sao chép, không liên kết tượng trưng) ở yêu cầu đầu tiên. Nếu bạn sửa đổi chúng, bạn phải xóa bộ đệm để cập nhật chúng.

Trong chế độ sản xuất, tài sản không được cụ thể hóa (gây ra lỗi HTTP HTTP theo yêu cầu) cho đến khi bạn chạy bin/magento setup:static-content:deploylệnh.

Hy vọng nó giúp.


Thế còn việc biên dịch DI?
Erfan

@Erfan bạn có ý gì chính xác hơn?
Alessandro Ronchi

2
Câu hỏi cũng truy vấn về ảnh hưởng của chế độ triển khai đối với quá trình biên dịch DI. Tôi vừa thực hiện một thử nghiệm nhanh và nếu bạn đang ở chế độ nhà phát triển, bạn không cần phải biên dịch DI để thay đổi của mình di.xmlhiển thị (có vẻ như việc tạo mã được thực hiện nhanh chóng trên mỗi lần truy cập trang?) nghĩ rằng nó sẽ là một bổ sung tốt cho câu trả lời đã tốt của bạn!
Erfan

Bạn nói đúng @Erfan
Alessandro Ronchi

1+ Cảm ơn anh. Làm việc như người ở. Tôi đã có một kinh nghiệm rất tệ khi thực hiện các lệnh triển khai nhiều lần để có được các thay đổi của tôi từ ít hơn sang css ngay cả trong chế độ nhà phát triển. Tôi đã sao chép .htaccess từ một dự án khác và dán tại vị trí được đề cập. Khalaala!
Umar Yousaf

4

từ kinh nghiệm của tôi, bạn không cần phải chạy bất kỳ lệnh nào để tạo mã / tệp tĩnh trong chế độ nhà phát triển.

Nếu các tệp tĩnh không được tạo, có thể có một vấn đề khác.

Tôi thấy hai lý do cho cái nhìn đầu tiên:

  • chế độ nhà phát triển không hoạt động chính xác. có thể vì lý do kích hoạt
  • ghi lại cho các tệp tĩnh trên pub / static.php không hoạt động

1
Tập tin ít hơn của tôi trong pub / static không tạo lại. Bạn có nhận được vấn đề này. Cách làm cho nó tự động tái tạo
mrtuvn

Điều quan trọng là chế độ nhà phát triển đang hoạt động và cũng viết lại đang hoạt động, vì bất kỳ yêu cầu nào đối với các tệp tĩnh đều được ghi lại thành pub / static.php trước đó sẽ tạo tệp (trong chế độ nhà phát triển) trong pub / static nếu nó chưa xuất hiện
David Verholen

4

Điều đó có nghĩa là, mỗi tệp riêng lẻ trong pub / static được tạo khi được yêu cầu và bạn không bao giờ cần phải gọi setup:static-content:deploy? Điều này mâu thuẫn với kinh nghiệm của tôi. Hoặc tôi có thể xóa bất kỳ tập tin và chúng sẽ được tạo lại?

Vâng. Nhưng theo kinh nghiệm của tôi, điều này không hoạt động hầu hết thời gian. Có thể là một lỗi. Giải pháp tốt hơn là xóa pub/staticnội dung và triển khai lại nội dung tĩnh bất cứ khi nào bạn thay đổi tệp tĩnh (js, css, html, v.v.) ngay cả khi bạn đã kích hoạt chế độ nhà phát triển. Câu hỏi của riêng tôi về điều này.


Nó phụ thuộc vào cách bạn nhìn thấy nó. Nếu bạn muốn chạy setup: static-content: triển khai mỗi khi bạn thực hiện thay đổi, bạn sẽ mất nhiều năm để hoàn thành một dự án vì về cơ bản bạn đang tạo mỗi tệp cho cửa hàng của mình khi bạn chỉ cập nhật một tệp. Vì vậy, giải pháp của tôi là ghi đè lên các tệp trong pub / static và xóa bộ đệm để xem các thay đổi của tôi. Khi tôi hài lòng với kết quả của mình thì tôi sẽ chuyển đến các tệp chủ đề hoặc mô-đun tùy chỉnh để ghi đè lên các tệp chính của mình và sau đó chạy thiết lập: static-content: triển khai để cập nhật các tệp tĩnh của tôi.
Wolfgang Leon

4

Chỉ cần làm rõ giữa ba chế độ khác nhau (nguồn: khóa học cơ bản Magento U). In đậm, những điểm cụ thể liên quan đến câu hỏi của bạn.

Chế độ nhà phát triển

  • Vật chất hóa tập tin tĩnh không được kích hoạt.
  • Uncaught ngoại lệ được hiển thị trong trình duyệt
  • Các ngoại lệ được ném trong xử lý lỗi, không được đăng nhập
  • Hệ thống đăng nhập var/report, rất chi tiết.

Bạn nên sử dụng chế độ Nhà phát triển trong khi bạn đang phát triển các tùy chỉnh hoặc tiện ích mở rộng. Lợi ích chính của chế độ này là các thông báo lỗi được hiển thị cho bạn. Nó không nên được sử dụng trong sản xuất vì ảnh hưởng của nó đến hiệu suất. Trong chế độ Nhà phát triển, các tệp xem tĩnh được tạo mỗi lần chúng được yêu cầu. Chúng được ghi vào pub/staticthư mục, nhưng bộ đệm này không được sử dụng. Điều này có tác động hiệu suất lớn, nhưng bất kỳ thay đổi nào nhà phát triển thực hiện để xem tệp đều có thể nhìn thấy ngay lập tức.

Các ngoại lệ chưa được hiển thị được hiển thị trong trình duyệt, thay vì được ghi lại. Một ngoại lệ được đưa ra bất cứ khi nào một thuê bao sự kiện không thể được gọi.

Đăng nhập hệ thống var/reportrất chi tiết trong chế độ này.

Chế độ sản xuất

  • Giai đoạn triển khai trên hệ thống sản xuất; hiệu suất cao nhất
  • Các ngoại lệ không được hiển thị cho người dùng - chỉ được ghi vào nhật ký.
  • Chế độ này vô hiệu hóa vật liệu tập tin tĩnh.
  • Magento docroot có thể có quyền chỉ đọc.

Bạn nên chạy Magento ở chế độ Sản xuất sau khi được triển khai đến máy chủ sản xuất.

Chế độ sản xuất cung cấp hiệu suất cao nhất trong Magento 2.

Khía cạnh quan trọng nhất của chế độ này là lỗi được ghi vào hệ thống tệp và không bao giờ được hiển thị cho người dùng. Trong chế độ này, các tệp xem tĩnh không được tạo khi đang được yêu cầu; thay vào đó, chúng phải được triển khai vào pub/staticthư mục bằng công cụ dòng lệnh. Các trang được tạo sẽ chứa các liên kết trực tiếp đến tài nguyên trang được triển khai.

Mọi thay đổi để xem tệp yêu cầu chạy lại công cụ triển khai.

Vì các tệp xem được triển khai bằng công cụ CLI, người dùng web cần phải có quyền truy cập ghi. Thư mục Magento pub/staticcó thể có quyền chỉ đọc, đây là một thiết lập an toàn hơn trên máy chủ có thể truy cập công khai.

Chế độ mặc định

  • Được sử dụng khi không có chế độ khác được chỉ định
  • Ẩn ngoại lệ từ người dùng và ghi chúng vào tệp nhật ký
  • Vật chất hóa tập tin tĩnh được kích hoạt.
  • Không được đề xuất / không được tối ưu hóa cho sản xuất: bộ nhớ đệm tác động tiêu cực đến hiệu suất.

Đúng như tên gọi của nó, Chế độ mặc định là cách phần mềm Magento hoạt động nếu không chỉ định chế độ khác.

Trong chế độ này, các lỗi được ghi vào tệp var/reportsvà không bao giờ được hiển thị cho người dùng. Các tệp xem tĩnh được vật chất hóa nhanh chóng và sau đó được lưu trữ.

Ngược lại với chế độ nhà phát triển, các thay đổi tệp xem không hiển thị cho đến khi các tệp xem tĩnh được tạo bị xóa.

Chế độ mặc định không được tối ưu hóa cho môi trường sản xuất, chủ yếu là do tác động bất lợi của các tệp tĩnh được thực hiện nhanh chóng thay vì tạo và triển khai chúng trước đó .

Nói cách khác, việc tạo các tệp tĩnh một cách nhanh chóng và lưu trữ chúng có tác động hiệu suất lớn hơn so với việc tạo chúng bằng cách sử dụng công cụ dòng lệnh tạo tệp tĩnh.

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.