Dalam pengembangan, semua aset javascript saya ditambahkan dengan body=1
dapatkan variabel. Apa yang sebenarnya ini lakukan?
http://localhost:3000/assets/application.js?body=1
Dalam pengembangan, semua aset javascript saya ditambahkan dengan body=1
dapatkan variabel. Apa yang sebenarnya ini lakukan?
http://localhost:3000/assets/application.js?body=1
Menelusuri kode sumber Sprocket yang kita temukan:
# Returns a 200 OK response tuple
def ok_response(asset, env)
if body_only?(env)
[ 200, headers(env, asset, Rack::Utils.bytesize(asset.body)), [asset.body] ]
else
[ 200, headers(env, asset, asset.length), asset ]
end
end
body_only?
diatur kapan ?body=1 or true
Untuk aset statis, Asset.body
didefinisikan sebagai:
def body
# File is read everytime to avoid memory bloat of large binary files
pathname.open('rb') { |f| f.read }
end
Sedangkan menyerahkan aset itu kembali ke dirinya sendiri adalah "benda tubuh yang mampu melakukan Rack"
# Add enumerator to allow `Asset` instances to be used as Rack
# compatible body objects.
def each
yield to_s
end
Ketika kita melihat bundled_asset
, yang Asset.body
didefinisikan kembali sebagai mengambil tubuh aset saja dan tidak termasuk dependensi apa pun. Asset.to_a
didefinisikan sebagai mengambil aset itu sendiri serta semua dependensinya sebagai array diteruskan ke Rack.
Dengan cara ini, aset tidak digabungkan bersama tetapi diambil sebagai objek individual, jadi file CSS individual masih bersifat individual.