class Sprockets::Webpack::WebpackDriver
Public Class Methods
new(config, entry)
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 8 def initialize(config, entry) @tempfile = Tempfile.new('bundle.XXXXXXXXX.js') @config_guard = FileGuard.new(config) cmd = "node #{compiler_js_path} #{config} #{entry} #{path.dirname} #{path.basename} 2>&1" @io = IO.popen({ 'NODE_ENV' => env }, cmd, 'r+') end
Public Instance Methods
compile()
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 15 def compile errors = [] @io.puts(@config_guard.detect_change? ? 'RELOAD' : '') # starts compilation bm = Benchmark.measure do while (line = read_line.strip) != 'WEBPACK::EOF' errors << line end end OpenStruct.new(errors: errors, data: path.read, benchmark: bm) rescue Errno::EPIPE, IOError errors.unshift '----- NODE BACKTRACE -----' errors.unshift "#{$ERROR_INFO.message}. Please check webpack.conf.js and restart web server" errors.unshift OpenStruct.new( errors: errors, data: 'console.error("Broken pipe. Webpack died.")', benchmark: "<#{@io.pid} died>") end
Private Instance Methods
compiler_js_path()
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 49 def compiler_js_path Pathname.new(__FILE__).dirname.join('compiler.js') end
env()
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 43 def env ENV.fetch('NODE_ENV') do defined?(::Rails) ? ::Rails.env : (ENV['RACK_ENV'] || 'development') end end
path()
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 53 def path @path ||= Pathname.new(@tempfile.path) end
read_line()
click to toggle source
# File lib/sprockets/webpack/webpack_driver.rb, line 39 def read_line @io.gets or fail IOError, 'Webpack died' end