Class: WebpackRails::Task

Inherits:
NodeTask
  • Object
show all
Defined in:
lib/webpack_rails/task.rb

Defined Under Namespace

Classes: Error

Class Method Summary collapse

Class Method Details

.app_node_pathObject



49
50
51
# File 'lib/webpack_rails/task.rb', line 49

def app_node_path
  @app_node_path ||= File.join(root_dir, 'node_modules')
end

.build_once(webpack_task_config) ⇒ Object



64
65
66
67
68
69
# File 'lib/webpack_rails/task.rb', line 64

def build_once(webpack_task_config)
  WebpackRails::Task.with_app_node_path do
    webpack_cmd_script = `#{WebpackRails::Task.node_command} -e "process.stdout.write(require.resolve('webpack/bin/webpack.js'))"`
    system "#{WebpackRails::Task.node_command} #{webpack_cmd_script} --config #{webpack_task_config[:webpack_config_file]}"
  end
end

.root_dirObject



17
18
19
# File 'lib/webpack_rails/task.rb', line 17

def root_dir
  @root_dir ||= defined?(Rails) ? Rails.root.to_s : Dir.pwd
end

.run_webpack(opts = {}) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/webpack_rails/task.rb', line 71

def run_webpack(opts = {})
  return if ENV['DISABLE_WEBPACK']

  result = nil
  task_duration = Benchmark.realtime do
    with_app_node_path do
      begin
        task = self.new(webpack_task_script(opts))
        result = task.run(webpack_task_opts(opts))
      rescue NodeTask::Error => e
        raise self::Error.new(e)
      end
    end
  end

  task_duration_ms = task_duration * 1000
  if defined?(Rails) && result
    if opts[:dev_server] && result[:started]
      Rails.logger.info("Started webpack-dev-server in #{task_duration_ms.round(0)}ms")
    end
  end
  result
end

.webpack_gem_dirObject



25
26
27
# File 'lib/webpack_rails/task.rb', line 25

def webpack_gem_dir
  @webpack_gem_dir ||= File.dirname(File.expand_path(__FILE__))
end

.webpack_task_dev_server_scriptObject



33
34
35
# File 'lib/webpack_rails/task.rb', line 33

def webpack_task_dev_server_script
  @webpack_task_dev_server_script ||= File.join(webpack_gem_dir, 'webpack-task-dev-server.js')
end

.webpack_task_opts(opts) ⇒ Object



43
44
45
46
47
# File 'lib/webpack_rails/task.rb', line 43

def webpack_task_opts(opts)
  opts.merge(
    webpack_config_file: opts[:webpack_config_file] ? opts[:webpack_config_file].to_s : nil,
  )
end

.webpack_task_script(opts) ⇒ Object



37
38
39
40
41
# File 'lib/webpack_rails/task.rb', line 37

def webpack_task_script(opts)
  return webpack_task_watch_script if opts[:watch]
  return webpack_task_dev_server_script if opts[:dev_server]
  fail "can't determine which task to run"
end

.webpack_task_watch_scriptObject



29
30
31
# File 'lib/webpack_rails/task.rb', line 29

def webpack_task_watch_script
  @webpack_task_watch_script ||= File.join(webpack_gem_dir, 'webpack-task-watch.js')
end

.with_app_node_pathObject



53
54
55
56
57
58
59
60
61
62
# File 'lib/webpack_rails/task.rb', line 53

def with_app_node_path
  prev_node_path = ENV['NODE_PATH']
  ENV['NODE_PATH'] = app_node_path
  return_value = nil
  Dir.chdir(root_dir) do
    return_value = yield
  end
  ENV['NODE_PATH'] = prev_node_path
  return_value
end

.working_dirObject



21
22
23
# File 'lib/webpack_rails/task.rb', line 21

def working_dir
  @working_dir ||= _make_working_dir
end