ฉันค้นพบวิธีที่หรูหราราวกับ Rails ที่จะทำ ก่อนอื่นให้เปลี่ยนชื่อ.scss
ไฟล์ของคุณเป็น.scss.erb
จากนั้นใช้ไวยากรณ์เช่นนี้ (ตัวอย่างสำหรับเนื้อหา CSS อัญมณี highlight_js-rails4 ):
@import "<%= asset_path("highlight_js/github") %>";
ทำไมคุณไม่สามารถโฮสต์ไฟล์โดยตรงผ่าน SCSS :
การดำเนินการ@import
ใน SCSS นั้นทำงานได้ดีสำหรับไฟล์ CSS ตราบใดที่คุณใช้เส้นทางแบบเต็มไม่ทางใดก็ทางหนึ่ง ในโหมดการพัฒนาrails s
ให้บริการสินทรัพย์โดยไม่ต้องรวบรวมดังนั้นเส้นทางเช่นนี้ทำงาน ...
@import "highlight_js/github.css";
... /assets/highlight_js/github.css
เพราะเส้นทางที่เจ้าภาพเป็นตัวอักษร หากคุณคลิกขวาที่หน้าและ "ดูแหล่งที่มา" จากนั้นคลิกที่ลิงค์สำหรับสไตล์ชีทที่มีด้านบน@import
คุณจะเห็นบรรทัดที่มีลักษณะดังนี้:
@import url(highlight_js/github.css);
เครื่องยนต์ SCSS แปลไป"highlight_js/github.css"
url(highlight_js/github.css)
สิ่งนี้จะทำงานได้จนกว่าคุณจะตัดสินใจลองใช้งานในการผลิตโดยที่สินทรัพย์ถูกคอมไพล์ไว้ล่วงหน้ามีแฮชแทรกลงในชื่อไฟล์ ไฟล์ SCSS จะยังคงเป็นสแตติก/assets/highlight_js/github.css
ที่ไม่ได้ทำการคอมไพล์ล่วงหน้าและไม่มีอยู่ในการผลิต
โซลูชันนี้ทำงานอย่างไร:
ประการแรกด้วยการย้าย.scss
ไฟล์ไปที่.scss.erb
เราได้เปลี่ยน SCSS เป็นเทมเพลตสำหรับ Rails อย่างมีประสิทธิภาพ ตอนนี้เมื่อใดก็ตามที่เราใช้<%= ... %>
เทมเพลตแท็กตัวประมวลผลเทมเพลต Rails จะแทนที่ตัวอย่างเหล่านี้ด้วยผลลัพธ์ของรหัส (เช่นเดียวกับเทมเพลตอื่น ๆ )
การระบุasset_path("highlight_js/github")
ใน.scss.erb
ไฟล์ทำสองสิ่ง:
- ทริกเกอร์
rake assets:precompile
งานเพื่อคอมไพล์ไฟล์ CSS ที่เหมาะสม
- สร้าง URL ที่สะท้อนสินทรัพย์อย่างเหมาะสมโดยไม่คำนึงถึงสภาพแวดล้อมของ Rails
นี่ก็หมายความว่าเอ็นจิน SCSS ไม่ได้แยกไฟล์ CSS ด้วย มันเป็นเพียงการโฮสต์ลิงก์ไปยังมัน! ดังนั้นจึงไม่มีแพทช์ลิง hokey หรือวิธีแก้ปัญหาขั้นต้น เราให้บริการเนื้อหา CSS ผ่าน SCSS ตามที่ตั้งใจไว้และใช้ URL เพื่อบอกเนื้อหา CSS ว่าเป็น Rails ไว้ หวาน!