Pertanyaan apa yang dilakukan? body = 1 lakukan di rel 3.1 aset pipeline?


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

32
2017-09-28 13:10


asal


Jawaban:


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.


32
2017-09-28 14:27