Magento2: Tạo lại tệp css trong thư mục pub / static


51

Tôi đã cài đặt Magento 2 và đặt chế độ nhà phát triển, sau đó tôi đã cài đặt một mô-đun có chứa các tệp css và js. Mô-đun hoạt động tốt và các tệp css và js được hiển thị từ thư mục pub / static. Bây giờ tôi đã thực hiện thay đổi css trong thư mục mô-đun css và chạy lệnh

php bin/magento setup:static-content:deploy

nhưng Magento không thực hiện các thay đổi mới của tôi trong các tệp pub / css tĩnh nên tôi nhận được nội dung tệp css cũ. Có ai biết làm thế nào để tạo lại toàn bộ tập tin css trong thư mục pub / static không?


8
FYI: Magento 2 có chế độ nhà phát triển để bạn không phải triển khai nội dung tĩnh mọi lúc. Tôi đã lãng phí hàng giờ liền trong tháng vừa qua để triển khai lại nội dung tĩnh. Vì vậy, đừng giống như tôi và chuyển sang chế độ nhà phát triển (trên máy cục bộ của bạn. Máy chủ trực tiếp của bạn sẽ ở chế độ sản xuất)
Nathan Merrill

Tại sao phải tái sinh với phiên bản khác nhau ??? Tôi có một vấn đề với phiên bản tập tin triển khai không phù hợp. magento.stackexchange.com/questions/94502/ Mạnh
Magento2 Devloper

3
Nếu magento ở chế độ nhà phát triển, nó sẽ tạo liên kết tượng trưng cho các tệp tĩnh nhưng để điều này xảy ra, bạn phải có .htaccesstệp trong pub/staticthư mục để biết cách tạo liên kết tệp, nếu bạn đã xóa thư mục pub / static .htaccesshiện bị thiếu
Vlad Patru

@NathanMerrill bạn rất đúng nhưng hầu hết các nhà phát triển không đọc tài liệu và tất cả các câu trả lời và vẫn chạy lệnh tĩnh: triển khai và điều hơi buồn là một số công ty có tài khoản trên Stackexchange cung cấp câu trả lời như vậy , lãng phí thời gian
Vlad Patru

Câu trả lời:


69

Trước khi xóa pub / static, hãy tạo một bản sao lưu của pub / static / .htaccess và khôi phục lại nó. nếu không, tất cả css và js của bạn sẽ hiển thị lỗi 404!

  1. Xóa pub/static[Giữ .htaccess sao lưu và sao chép lại]
    1. Tẩy var/cache
    2. Tẩy var/composer_home
    3. Tẩy var/generation
    4. Tẩy var/page_cache
    5. Tẩy var/view_preprocessed
    6. chạy php bin/magento setup:static-content:deploy

48
M2 không làm cho mọi thứ rất thân thiện với nhà phát triển.
Matthew McLennan

10
@CarComp không có tệp nào phải được xóa thủ công. magento nên chăm sóc điều đó. nó rất phiền phức
Claudiu Creanga

10
Bạn phải là người mới đối với magento;)
CarComp

6
Tôi nghĩ rằng việc xóa pub / static bạn cũng mất tệp .htaccess bên trong rất quan trọng để tránh lỗi 404, bạn có thể xóa các thư mục con của pub / static nhưng vẫn nên giữ nguyên .htaccess
Elio Ermini

3
Tôi mới biết đến "magento". BÌNH THƯỜNG? Đây có phải là cách chính thức để cập nhật css?
puchu

20

câu trả lời ở đây không đề cập đến việc bạn không nên xóa .htaccess trong thư mục pub / static.

để xóa tất cả các tệp ngoại trừ .htacces vào thư mục pub / static và chạy

find . -depth -name .htaccess -prune -o -delete

sau đó bạn có thể chạy

rm -rf var/cache/ var/generation/ var/page_cache/ var/view_preprocessed/ 

Tại sao phải tái sinh với phiên bản khác nhau ??? Tôi có một vấn đề với phiên bản tập tin triển khai không phù hợp. magento.stackexchange.com/questions/94502/ Mạnh
Magento2 Devloper

1
đã không làm việc như mong đợi
Barshe Ferreboeuf

11

Tôi vừa xóa các tập tin css khỏi pub/staticthư mục và chạy lệnh:

php bin/magento setup:static-content:deploy

Nó sẽ tạo lại cùng một tệp với những thay đổi mới nhất.


Tại sao phải tái sinh với phiên bản khác nhau ??? Tôi có một vấn đề với phiên bản tập tin triển khai không phù hợp. magento.stackexchange.com/questions/94502/ Mạnh
Magento2 Devloper

9

Như câu hỏi dành cho js and csscập nhật trong Magento 2 ở chế độ nhà phát triển .

  1. Cập nhật JS trong mô-đun được tôn trọng của bạn, trước khi làm mới trang cùng một tệp từ pub/static/frontend/namespace/theme/ ... module/js/...xóa nó để sau khi làm mới trang, tệp JS mới sẽ tạo trong thư mục pub.
  2. Cập nhật CSS trong mô-đun được tôn trọng của bạn, thực hiện pt 1.
  3. Cập nhật tập tin ít hơn

Cài đặt chủ đề trong magento ...\dev\tools\grunt\configs\themes.js

Sao chép bất kỳ một ví dụ chủ đề chủ đề luma cho chủ đề của bạn và gán tên giả sử xyz

xyz: {
        area: 'frontend',
        name: 'Magento/luma',
        locale: 'en_US',
        files: [
            'css/styles-m',
            'css/styles-l'
        ],
        dsl: 'less'
    }

Trong thư mục gốc thay đổi tên tệp: Gruntfile.js.sample thành Gruntfile.js

Trong thư mục gốc, thay đổi tên tệp: pack.json.sample thành pack.json

Cần phải có tiếng lách cách trong thư mục trang web của bạn cài đặt khác qua npm

Mở dấu nhắc lệnh với sự cho phép của quản trị viên

Chuyển đến thư mục trang web trong CMD và nhấn lệnh grunt exec:themelần đầu tiên sau khi triển khai chủ đề

Sau đó, grunt less:theme mỗi khi chúng tôi thực hiện bất kỳ thay đổi trong ít hơn

Nếu bạn thường xuyên thay đổi sử dụng ít hơn grunt watch, nó sẽ tự động nhấngrunt less:theme

Lưu ý: Bạn có thể gặp lỗi Symlink, vì vậy hãy đi đến tệp .../app/etc/di.xmlvà nhận xét hoặc xóa mã (mã bên dưới) trong địa phương cho đến khi phát triển xong, đừng đẩy mã chnaged của tệp này sang máy chủ, nó chỉ được yêu cầu tại địa phương nếu cần.

<item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>

7

Cách đơn giản 1

Trong Quản trị viên Magento. Đi đến System > Tools > Cache Managementvà nhấp vào Flush Cache Files Cache .

Cách đơn giản 2

Nếu bạn vừa thay đổi tệp css đã tồn tại , điều bạn cần làm chỉ là xóa tệp tương ứng pub/static, sau đó khi bạn làm mới trang, nó sẽ tạo tệp css phiên bản mới. Nó hoạt động trong chế độ nhà phát triển .


Để ý

  1. Khi bạn tạo tệp mới, thay vì sửa đổi tệp hiện có, bạn cũng có thể cần xóa bộ đệm , php bin/magento cache:flush.

  2. Chế độ mặc địnhchế độ nhà phát triển không cần triển khai các tệp xem tĩnh , vì các tệp tĩnh được tạo động thay vì được vật chất hóa. (Tham khảo: Giới thiệu về chế độ Magento )

  3. Trong chế độ sản xuất , bạn cũng có thể cần php bin/magento setup:static-content:deployphp bin/magento cache:flushtôi chưa thử chế độ sản xuất .


6

Ok, dựa trên những gì tôi đã đọc trong các bài đăng khác và kinh nghiệm cá nhân của tôi ở đây là quá trình tạo lại CSS hoặc bất kỳ Nội dung tĩnh nào:

php bin/magento setup:upgrade

Điều này sẽ xóa sạch tất cả các tệp cache / thế hệ / etc cần thiết mà không xóa bất cứ thứ gì bạn thực sự cần.

php bin/magento setup:di:compile

Điều này sau đó sẽ biên dịch lại các tập tin. Cuối cùng:

php bin/magento setup:static-content:deploy

Sau lệnh cuối cùng, mọi thứ sẽ mới và mới, chỉ cần làm mới trang của bạn.

----- Ghi chú ------

1) Đảm bảo quyền và tập tin của bạn: nhóm người dùng được đặt chính xác trước khi thực hiện việc này, bạn có thể cần nói về những điều này với sysadmin của mình.

2) Nếu thiết lập của bạn: lệnh nâng cấp không thành công, nó có thể xóa các tệp và không thể ghi các tệp mới, như trường hợp của tôi do quyền của tệp. Điều này có thể phá vỡ trang web của bạn, chỉ cần loại bỏ các quyền, sau đó chạy lại lệnh.

3) Tôi chưa tìm thấy (cho đến nay) một cách chỉ biên dịch lại một chủ đề hoặc tệp cụ thể (sẽ rất hữu ích nếu có ai tìm được cách) mà không cần viết một tập lệnh hoàn toàn tùy chỉnh

Nếu ai biết điều gì tốt hơn hãy cho tôi biết, vì 12 phút biên dịch tệp vì tôi phải thực hiện một số thay đổi css là thiết kế cực kỳ kém trong mắt tôi.

--- Biên tập ---

Magento 2 có Grunt gắn liền với nó và điều này giúp làm mới các tệp CSS / LESS dễ dàng hơn vô cùng nếu bạn dành thời gian để định cấu hình nó. Hầu hết các tệp đều ở đó dưới dạng tệp .sample chỉ cần xóa phần mở rộng tệp .sample, định cấu hình tệp Themes.js trong thư mục / dev / tools / grunt / configs. Sau đó, khi bạn cần làm mới các tệp LESS của mình, bạn chỉ cần chạy ít hơn: - theme-- từ dòng lệnh.

Tài nguyên: http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/css-topics/css_debug.html


Ngừng cung cấp cài đặt php bin / magento: static-content: phương thức triển khai, trong chế độ nhà phát triển, magento có liên kết tượng trưng
Vlad Patru

Oh và xóa thủ công các thư mục, xóa các tệp .htaccess và các tệp khác không liên quan, và buộc nó phải xây dựng lại là phương pháp tốt hơn ??? Tôi đã thêm một nhận xét về việc sử dụng Grunt, bởi vì chỉ cần chuyển cửa hàng của bạn sang chế độ nhà phát triển sẽ không khởi tạo tất cả các liên kết tượng trưng và làm mới css của bạn trên trang tải lại.
Vallier

6

đừng quên để chạy grunt exec:theme, grunt less:themelệnh đâu themelà chủ đề bạn khai báo trong themes.jstập tin từ thư mục cấu hình của grunt (tất cả điều này là trong hướng phát triển) và khi bạn có magento trong chế độ nhà phát triển bạn không nên chạy lệnh triển khai tĩnh, Magento2làm việc vớiSymlinks


1
"Khi bạn có magento ở chế độ nhà phát triển, bạn không nên chạy lệnh triển khai tĩnh" <- Điều này cực kỳ hữu ích với tôi. Cảm ơn! Tôi vừa xóa nội dung của thư mục pub / static (ngoại trừ .htaccess), làm mới trang và symliks vào các tệp css của tôi được tạo tự động. Bây giờ tôi có thể chỉnh sửa chúng một cách nhanh chóng. Ai nói Magento 2 không thân thiện?! Tôi chỉ cần biết làm thế nào để sử dụng nó tôi đoán.
Rooster242

1
Xin chào cảm ơn bạn đời, ít cằn nhằn: mặc định đã giải quyết vấn đề
Yusuf Ibrahim

6

Chạy các lệnh trên bạn gốc Magento thư mục:

alias mage="php -d memory_limit=-1 -f bin/magento"

chmod -R 775 pub/static/ var/ pub/media/ &&
rm -rf var/view_preprocessed/ var/cache/ var/page_cache/ var/tmp/ var/generation/ pub/static/frontend/ ;
mage cache:flush &
mage indexer:reindex &
mage setup:upgrade &&
mage setup:static-content:deploy ; 
mage setup:db-data:upgrade &&
mage dev:source-theme:deploy &&
chmod -R 775 pub/static/ pub/media/ var/

Không bao giờ nghĩ đến việc chạy một reindex trong nền
Sergei Filippov

Có phải tôi hoặc các lệnh Magento 1 này trả lời cho câu hỏi Magento 2 không?
Barry

Không có lệnh Magento 1, chúng đến từ Magento 2
Rafael Corrêa Gomes

6

Có một lưu ý quan trọng cần thực hiện về câu hỏi này mà hầu hết các câu trả lời không chỉ ra cụ thể. Trong trường hợp của bạn (với thiết lập bạn đang sử dụng), lý do các thay đổi CSS của bạn không được chọn khi bạn tạo lại CSS vào pub/staticthư mục là bạn không xóa nội dung của var/view_preprocessedgiám đốc. Bên trong thư mục này có phiên bản CSS được lưu trong bộ nhớ cache của bạn đang kéo vào pub/staticthư mục khi bạn chạy php bin/magento setup:static-content:deploylệnh.

Vì vậy, khi bạn biên dịch lại, trước tiên Magento sẽ tìm đến var/view_preprocessedthư mục cho CSS được lưu trữ. Nếu thư mục này trống, nó sẽ tìm đến các tệp chủ đề và kéo CSS đó để biên dịch.

Các cài đặt này có thể định cấu hình được, vì vậy có rất nhiều cách để đến đích sẽ thay đổi đường bạn cần đi. Nhưng đối với giải pháp cho thiết lập cụ thể của bạn:

  1. Xóa các tệp khỏi pub/staticthư mục:rm -rf pub/static/*

  2. Xóa các tệp khỏi var/view_preprocessedthư mục:rm -rf var/view_preprocessed/*

  3. Biên dịch lại thư mục tĩnh pub: php bin/magento setup:static-content:deploy

  4. Xóa bộ nhớ cache đã được bật: php bin/magento cache:clean

  5. Làm mới trình duyệt.


1
sẽ rất tuyệt nếu magento2 tạo liên kết tượng trưng cho các tệp bị ảnh hưởng đó trong chế độ nhà phát triển, sau đó thay đổi trong các tệp mô-đun có thể nhìn thấy khi đang di chuyển
roman204

Nó có, nhưng tôi đã không hiểu được khi nào và bằng cách nào, os tôi đã không đưa ra câu trả lời này. Có các tệp cấu hình chung có thể đặt tệp này trong tệp di.xml ( app/etc/di.xml) của bạn . Nhưng tôi đã có kết quả hỗn hợp trong khi thử nghiệm. Có thêm một chút ở đây trong câu trả lời thứ hai: magento.stackexchange.com/questions/116605/ Đổi
circleix


5
  1. Hủy bỏ quán rượu tĩnh.
  2. Cho pub/staticphép 777
  3. Xóa bộ nhớ cache.
  4. Chạy: php bin/magento setup:static-content:deploy

Bạn sẽ thấy css mới.

GHI CHÚ:

Cho phép thư mục và tập tin thích hợp.

Tôi hy vọng điều này sẽ giúp bạn.


"Bạn sẽ thấy css mới." - Tôi không nhưng cảm ơn bạn
Barry

4

Bạn không thể xóa bộ nhớ cache tĩnh trong bảng quản trị và sau đó

run php bin/magento setup:static-content:deploy

1

Hãy chắc chắn rằng bạn đang sử dụng chế độ nhà phát triển.

Sau đó thực thi đoạn mã sau:

chmod -R 777 var generated pub/static
grunt exec:default
grunt less:your_theme_name

Làm mới trang frontend, Những bước này đã giải quyết vấn đề của tôi.


thật tuyệt, nó thực sự giúp tôi cảm ơn
Yoesoff

0

Tuy nhiên, bạn có thể thêm -fhoặc --forcegắn cờ vào lệnh thiết lập.

Thí dụ:

php bin/magento setup:static-content:deploy -f

0

Tôi sẽ thả giọt trí tuệ của tôi ở đây.

Tôi sử dụng một cache_fly.shtập lệnh bash mà về cơ bản là:

#!/bin/bash
start=`date +%s%N`
./magento setup:upgrade && \ 
./magento cache:flush && \ 
./magento setup:static-content:deploy -f
end=`date +%s%N`
runtime=$(bc <<< "scale=9;($end-$start)/1000000000")
echo "" && echo "" && echo -e "\e[34mTOTAL EXECUTION TIME: \e[1m\e[93m$runtime\e[0m"

LƯU Ý: Tôi đã thêm một tiếng vang để cho tôi biết tôi đã lãng phí bao nhiêu thời gian trong cuộc đời để chờ nó chạy. Ngoài ra ./magentolà một kịch bản để làm php bin/magentohoặc gọi điều tương tự bên trong container docker, nếu docker được sử dụng, bạn có thể tạo hoặc chỉ ra php bin/magentonhưng nếu bạn đang đọc điều này, bạn nên biết tôi đang nói về điều gì, nếu không, xin vui lòng chạy hỏi để được giúp đỡ.


0

Ít thích ứng cho trường hợp của tôi

#!/bin/bash
start=`date +%s%N`
chmod -R 775 pub/static/ var/ pub/media/ && \
rm -rf var/view_preprocessed/* var/cache/* var/page_cache/* var/tmp/* var/generation/* pub/static/frontend/* && \
./magento cache:flush && \
./magento setup:upgrade && \
./magento cache:clean && \
./magento s:s:d es_ES en_US -f && \
./magento setup:di:compile && \
chmod -R 775 pub/static/ pub/media/ var/
end=`date +%s%N
runtime=$(bc <<< "scale=9;($end-$start)/1000000000")
echo "" && echo "" && echo -e "\e[34mTOTAL EXECUTION TIME: \e[1m\e[93m$runtime\e[0m"
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.