@@ -21,10 +21,10 @@ def compile
21
21
return unless available?
22
22
clear_webpacker_packs
23
23
Dir . chdir ( "./test/#{ DUMMY_LOCATION } " ) do
24
- # capture_io do
24
+ capture_io do
25
25
Rake ::Task [ 'webpacker:compile' ] . reenable
26
26
Rake ::Task [ 'webpacker:compile' ] . invoke
27
- # end
27
+ end
28
28
end
29
29
# Reload cached JSON manifest:
30
30
manifest_refresh
@@ -40,122 +40,107 @@ def clear_webpacker_packs
40
40
FileUtils . rm_rf ( PACKS_DIRECTORY )
41
41
end
42
42
43
- if MAJOR < 3
44
- def manifest_refresh
45
- Webpacker ::Manifest . load
43
+ # Start a webpack-dev-server
44
+ # Call the block
45
+ # Make sure to clean up the server
46
+ def with_dev_server
47
+
48
+ old_env = ENV [ 'NODE_ENV' ]
49
+ ENV [ 'NODE_ENV' ] = 'development'
50
+
51
+ # Start the server in a forked process:
52
+ webpack_dev_server = Dir . chdir ( "test/#{ DUMMY_LOCATION } " ) do
53
+ spawn 'RAILS_ENV=development ./bin/webpack-dev-server '
46
54
end
47
- else
48
- def manifest_refresh
49
- Webpacker . manifest . refresh
55
+
56
+ stop_time = Time . now + 30 . seconds
57
+ detected_dev_server = false
58
+ loop do
59
+ detected_dev_server = dev_server_running?
60
+ break if detected_dev_server || Time . now > stop_time
61
+ sleep 0.5
50
62
end
63
+
64
+ # If we didn't hook up with a dev server after waiting, fail loudly.
65
+ raise 'Failed to start dev server' unless detected_dev_server
66
+ puts 'Detected dev server - Continuing'
67
+
68
+ # Call the test block:
69
+ yield
70
+
71
+ ensure
72
+ # Kill the server process
73
+ puts "Killing webpack dev server"
74
+ kill_cmd = "kill -9 #{ webpack_dev_server } "
75
+
76
+ puts kill_cmd
77
+ `#{ kill_cmd } `
78
+ # Remove the dev-server packs:
79
+ WebpackerHelpers . clear_webpacker_packs
80
+ ENV [ 'NODE_ENV' ] = old_env
81
+ puts "Killed."
51
82
end
52
83
53
- if MAJOR < 3
84
+ if MAJOR < 3 # Old webpackers
85
+
86
+ def dev_server_running?
87
+ manifest_refresh
88
+ example_asset_path = manifest_data . values . first
89
+ begin
90
+ file = open ( 'http://localhost:8080/packs/application.js' )
91
+ rescue StandardError => e
92
+ file = nil
93
+ end
94
+ if !example_asset_path . start_with? ( 'http://localhost:8080' ) && ! file
95
+ puts "Manifest doesn't include absolute path to dev server"
96
+ return false
97
+ end
98
+ true
99
+ end
100
+
101
+ def manifest_refresh
102
+ Webpacker ::Manifest . load
103
+ end
104
+
54
105
def manifest_lookup name
55
106
Webpacker ::Manifest . load ( name )
56
107
end
57
- else
58
- def manifest_lookup _
59
- Webpacker . manifest
60
- end
61
- end
62
108
63
- if MAJOR < 3
64
109
def manifest_data
65
110
Webpacker ::Manifest . instance . data
66
111
end
67
- else
68
- def manifest_data
69
- Webpacker . manifest . refresh
70
- end
71
- end
72
112
73
- # Start a webpack-dev-server
74
- # Call the block
75
- # Make sure to clean up the server
76
- def with_dev_server
77
- # Start the server in a forked process:
78
- webpack_dev_server = Dir . chdir ( "test/#{ DUMMY_LOCATION } " ) do
79
- spawn 'RAILS_ENV=development ./bin/webpack-dev-server '
80
- end
113
+ else # New webpackers
81
114
82
- detected_dev_server = false
115
+ def dev_server_running?
116
+ Webpacker . instance . instance_variable_set ( :@config , nil )
117
+ return false unless Webpacker . dev_server . running?
83
118
84
- # Wait for it to start up, make sure it's there by connecting to it:
85
- 30 . times do | i |
119
+ ds = Webpacker . dev_server
120
+ example_asset_path = manifest_data . values . first
86
121
begin
87
- # Make sure that the manifest has been updated:
88
- manifest_lookup ( "./test/#{ DUMMY_LOCATION } /public/packs/manifest.json" )
89
- example_asset_path = manifest_data . values . first
90
- if example_asset_path . nil?
91
- # Debug helper
92
- # puts "Manifest is blank, all manifests:"
93
- # Dir.glob("./test/#{DUMMY_LOCATION}/public/packs/*.json").each do |f|
94
- # puts f
95
- # puts File.read(f)
96
- # end
97
- next
98
- end
99
- # Make sure the dev server is up:
100
- if MAJOR < 3
101
- file = open ( 'http://localhost:8080/packs/application.js' )
102
- if !example_asset_path . start_with? ( 'http://localhost:8080' ) && ! file
103
- raise "Manifest doesn't include absolute path to dev server"
104
- end
105
- else
106
- # Webpacker proxies the dev server when Rails is running in Webpacker 3
107
- # so the manifest doens't have absolute paths anymore..
108
- # Reload webpacker config.
109
- old_env = ENV [ 'NODE_ENV' ]
110
- ENV [ 'NODE_ENV' ] = 'development'
111
- Webpacker . instance . instance_variable_set ( :@config , nil )
112
- Webpacker . config
113
- running = Webpacker . dev_server . running?
114
- ENV [ 'NODE_ENV' ] = old_env
115
- raise "Webpack Dev Server hasn't started yet" unless running
116
- end
117
-
118
- detected_dev_server = true
119
- break
120
- rescue StandardError => err
121
- puts err . message
122
- ensure
123
- sleep 0.5
124
- # debug counter
125
- # puts i
122
+ file = open ( "#{ ds . protocol } ://#{ ds . host } :#{ ds . port } #{ example_asset_path } " )
123
+ rescue StandardError => e
124
+ file = nil
126
125
end
126
+ if ! file
127
+ puts "Dev server is not serving assets yet"
128
+ return false
129
+ end
130
+ true
127
131
end
128
132
129
- # If we didn't hook up with a dev server after waiting, fail loudly.
130
- unless detected_dev_server
131
- raise 'Failed to start dev server'
133
+ def manifest_refresh
134
+ Webpacker . manifest . refresh
132
135
end
133
136
134
- # Call the test block:
135
- yield
136
- ensure
137
- # Kill the server process
138
- # puts "Killing webpack dev server"
139
- check_cmd = 'lsof -i :8080 -S'
140
- 10 . times do
141
- # puts check_cmd
142
- status = `#{ check_cmd } `
143
- # puts status
144
- remaining_pid_match = status . match ( /\n [a-z]+\s +(\d +)/ )
145
- if remaining_pid_match
146
- remaining_pid = remaining_pid_match [ 1 ]
147
- # puts "Remaining #{remaining_pid}"
148
- kill_cmd = "kill -9 #{ remaining_pid } "
149
- # puts kill_cmd
150
- `#{ kill_cmd } `
151
- sleep 0.5
152
- else
153
- break
154
- end
137
+ def manifest_lookup _
138
+ Webpacker . manifest
139
+ end
140
+
141
+ def manifest_data
142
+ Webpacker . manifest . refresh
155
143
end
156
144
157
- # Remove the dev-server packs:
158
- WebpackerHelpers . clear_webpacker_packs
159
- # puts "Killed."
160
145
end
161
146
end
0 commit comments