shakapacker 6.1.1 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.node-version +1 -1
  3. data/CHANGELOG.md +16 -2
  4. data/Gemfile.lock +1 -1
  5. data/README.md +31 -15
  6. data/docs/customizing_babel_config.md +2 -0
  7. data/docs/style_loader_vs_mini_css.md +48 -0
  8. data/docs/using_esbuild_loader.md +1 -1
  9. data/docs/using_swc_loader.md +2 -2
  10. data/docs/v6_upgrade.md +69 -73
  11. data/lib/install/config/webpacker.yml +14 -0
  12. data/lib/install/template.rb +2 -2
  13. data/lib/webpacker/commands.rb +2 -2
  14. data/lib/webpacker/compiler.rb +1 -1
  15. data/lib/webpacker/configuration.rb +12 -4
  16. data/lib/webpacker/dev_server.rb +11 -2
  17. data/lib/webpacker/helper.rb +0 -7
  18. data/lib/webpacker/instance.rb +1 -1
  19. data/lib/webpacker/manifest.rb +3 -3
  20. data/lib/webpacker/railtie.rb +7 -0
  21. data/lib/webpacker/version.rb +1 -1
  22. data/lib/webpacker/version_checker.rb +152 -0
  23. data/package/__tests__/config.js +11 -0
  24. data/package/config.js +6 -0
  25. data/package/environments/base.js +1 -1
  26. data/package/inliningCss.js +1 -1
  27. data/package/rules/__tests__/file.js +35 -0
  28. data/package/rules/__tests__/index.js +11 -0
  29. data/package/rules/__tests__/raw.js +18 -0
  30. data/package/rules/file.js +2 -17
  31. data/package/rules/raw.js +2 -2
  32. data/package/swc/index.js +3 -3
  33. data/package.json +1 -1
  34. data/test/configuration_test.rb +24 -3
  35. data/test/fixtures/beta_package.json +13 -0
  36. data/test/fixtures/git_url_package.json +13 -0
  37. data/test/fixtures/github_url_package.json +13 -0
  38. data/test/fixtures/normal_package.json +13 -0
  39. data/test/fixtures/relative_path_package.json +13 -0
  40. data/test/fixtures/semver_caret_package.json +13 -0
  41. data/test/fixtures/semver_tilde_package.json +13 -0
  42. data/test/fixtures/without_package.json +13 -0
  43. data/test/helper_test.rb +12 -12
  44. data/test/test_app/config/webpacker.yml +4 -0
  45. data/test/test_app/config/webpacker_manifest_path.yml +80 -0
  46. data/test/version_checker_test.rb +271 -0
  47. data/test/webpacker_test.rb +15 -0
  48. metadata +28 -3
@@ -0,0 +1,80 @@
1
+ # Note: You must restart bin/webpack-dev-server for changes to take effect
2
+
3
+ default: &default
4
+ source_path: app/packs
5
+ source_entry_path: entrypoints
6
+ public_root_path: public
7
+ public_output_path: packs
8
+ cache_path: tmp/webpacker
9
+ webpack_compile_output: false
10
+
11
+ # Location for manifest.json, defaults to {public_output_path}/manifest.json if unset
12
+ manifest_path: app/packs/manifest.json
13
+
14
+ # Additional paths webpack should look up modules
15
+ # ['app/assets', 'engine/foo/app/assets']
16
+ additional_paths:
17
+ - app/assets
18
+ - /etc/yarn
19
+ - some.config.js
20
+ - app/elm
21
+
22
+ # Reload manifest.json on all requests so we reload latest compiled packs
23
+ cache_manifest: false
24
+
25
+ static_assets_extensions:
26
+ - .jpg
27
+ - .jpeg
28
+ - .png
29
+ - .gif
30
+ - .tiff
31
+ - .ico
32
+ - .svg
33
+
34
+ extensions:
35
+ - .mjs
36
+ - .js
37
+
38
+ development:
39
+ <<: *default
40
+ compile: true
41
+
42
+ # Reference: https://webpack.js.org/configuration/dev-server/
43
+ dev_server:
44
+ https: false
45
+ host: localhost
46
+ port: 3035
47
+ public: localhost:3035
48
+ hmr: false
49
+ overlay: true
50
+ disable_host_check: true
51
+ use_local_ip: false
52
+ pretty: false
53
+
54
+ test:
55
+ <<: *default
56
+ compile: true
57
+
58
+ # Compile test packs to a separate directory
59
+ public_output_path: packs-test
60
+
61
+ production:
62
+ <<: *default
63
+
64
+ # Production depends on precompilation of packs prior to booting for performance.
65
+ compile: false
66
+
67
+ # Cache manifest.json for performance
68
+ cache_manifest: true
69
+
70
+ staging:
71
+ <<: *default
72
+
73
+ # Production depends on precompilation of packs prior to booting for performance.
74
+ compile: false
75
+
76
+ # Cache manifest.json for performance
77
+ cache_manifest: true
78
+
79
+ # Compile staging packs to a separate directory
80
+ public_output_path: packs-staging
@@ -0,0 +1,271 @@
1
+ require "test_helper"
2
+ require "webpacker/version"
3
+
4
+ class NodePackageVersionDouble
5
+ attr_reader :raw, :major_minor_patch
6
+
7
+ def initialize(raw: nil, major_minor_patch: nil, semver_wildcard: false, skip_processing: false)
8
+ @raw = raw
9
+ @major_minor_patch = major_minor_patch
10
+ @semver_wildcard = semver_wildcard
11
+ @skip_processing = skip_processing
12
+ end
13
+
14
+ def semver_wildcard?
15
+ @semver_wildcard
16
+ end
17
+
18
+ def skip_processing?
19
+ @skip_processing
20
+ end
21
+ end
22
+
23
+ class VersionCheckerTest < Minitest::Test
24
+ def check_version(node_package_version, stub_gem_version = Webpacker::VERSION, stub_config = true)
25
+ version_checker = Webpacker::VersionChecker.new(node_package_version)
26
+ version_checker.stub :gem_version, stub_gem_version do
27
+ Webpacker.config.stub :ensure_consistent_versioning?, stub_config do
28
+ version_checker.raise_if_gem_and_node_package_versions_differ
29
+ end
30
+ end
31
+ end
32
+
33
+ def test_message_printed_if_consistency_check_disabled_and_mismatch
34
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
35
+
36
+ out, err = capture_io do
37
+ check_version(node_package_version, "6.0.0", false)
38
+ end
39
+
40
+ assert_match \
41
+ "Webpacker::VersionChecker - Version mismatch detected",
42
+ err
43
+ end
44
+
45
+ def test_message_printed_if_consistency_check_disabled_and_semver
46
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.1.0", major_minor_patch: ["6", "1", "0"], semver_wildcard: true)
47
+
48
+ out, err = capture_io do
49
+ check_version(node_package_version, "6.1.0", false)
50
+ end
51
+
52
+ assert_match \
53
+ "Webpacker::VersionChecker - Semver wildcard detected",
54
+ err
55
+ end
56
+
57
+ def test_raise_on_different_major_version
58
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
59
+
60
+ error = assert_raises do
61
+ check_version(node_package_version, "7.0.0")
62
+ end
63
+
64
+ assert_match \
65
+ "**ERROR** Webpacker: Webpacker gem and node package versions do not match",
66
+ error.message
67
+ end
68
+
69
+ def test_raise_on_different_minor_version
70
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
71
+
72
+ error = assert_raises do
73
+ check_version(node_package_version, "6.2.0")
74
+ end
75
+
76
+ assert_match \
77
+ "**ERROR** Webpacker: Webpacker gem and node package versions do not match",
78
+ error.message
79
+ end
80
+
81
+ def test_raise_on_different_patch_version
82
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.1", major_minor_patch: ["6", "1", "1"])
83
+
84
+ error = assert_raises do
85
+ check_version(node_package_version, "6.1.2")
86
+ end
87
+
88
+ assert_match \
89
+ "**ERROR** Webpacker: Webpacker gem and node package versions do not match",
90
+ error.message
91
+ end
92
+
93
+ def test_raise_on_semver_wildcard
94
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.0.0", major_minor_patch: ["6", "0", "0"], semver_wildcard: true)
95
+
96
+ error = assert_raises do
97
+ check_version(node_package_version, "6.0.0")
98
+ end
99
+
100
+ assert_match \
101
+ "**ERROR** Webpacker: Your node package version for shakapacker contains a ^ or ~",
102
+ error.message
103
+ end
104
+
105
+ def test_no_raise_on_matching_versions
106
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0", major_minor_patch: ["6", "0", "0"])
107
+
108
+ assert_silent do
109
+ check_version(node_package_version, "6.0.0")
110
+ end
111
+ end
112
+
113
+ def test_no_raise_on_matching_versions_beta
114
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0-beta.1", major_minor_patch: ["6", "0", "0"])
115
+
116
+ assert_silent do
117
+ check_version(node_package_version, "6.0.0.beta.1")
118
+ end
119
+ end
120
+
121
+ def test_no_raise_on_no_package
122
+ node_package_version = NodePackageVersionDouble.new(raw: nil, skip_processing: true)
123
+
124
+ assert_silent do
125
+ check_version(node_package_version, "6.0.0")
126
+ end
127
+ end
128
+
129
+ def test_no_raise_on_skipped_path
130
+ node_package_version = NodePackageVersionDouble.new(raw: "../shakapacker", skip_processing: true)
131
+
132
+ assert_silent do
133
+ check_version(node_package_version, "6.0.0")
134
+ end
135
+ end
136
+ end
137
+
138
+ class NodePackageVersionTest < Minitest::Test
139
+ def node_package_version(fixture_version: "normal")
140
+ file_path = File.expand_path("fixtures/#{fixture_version}_package.json", __dir__)
141
+ Webpacker::VersionChecker::NodePackageVersion.new(file_path)
142
+ end
143
+
144
+ def test_normal_package_raw
145
+ assert_equal "6.0.0", node_package_version.raw
146
+ end
147
+
148
+ def test_normal_package_major_minor_patch
149
+ assert_equal ["6", "0", "0"], node_package_version.major_minor_patch
150
+ end
151
+
152
+ def test_normal_package_skip_processing
153
+ assert_equal false, node_package_version.skip_processing?
154
+ end
155
+
156
+ def test_normal_package_semver_wildcard
157
+ assert_equal false, node_package_version.semver_wildcard?
158
+ end
159
+
160
+ def test_beta_package_raw
161
+ assert_equal "6.0.0-beta.1", node_package_version(fixture_version: "beta").raw
162
+ end
163
+
164
+ def test_beta_package_major_minor_patch
165
+ assert_equal ["6", "0", "0"], node_package_version(fixture_version: "beta").major_minor_patch
166
+ end
167
+
168
+ def test_beta_package_skip_processing
169
+ assert_equal false, node_package_version(fixture_version: "beta").skip_processing?
170
+ end
171
+
172
+ def test_beta_package_semver_wildcard
173
+ assert_equal false, node_package_version(fixture_version: "beta").semver_wildcard?
174
+ end
175
+
176
+ def test_semver_caret_package_raw
177
+ assert_equal "^6.0.0", node_package_version(fixture_version: "semver_caret").raw
178
+ end
179
+
180
+ def test_semver_caret_package_major_minor_patch
181
+ assert_equal ["6", "0", "0"], node_package_version(fixture_version: "semver_caret").major_minor_patch
182
+ end
183
+
184
+ def test_semver_caret_package_skip_processing
185
+ assert_equal false, node_package_version(fixture_version: "semver_caret").skip_processing?
186
+ end
187
+
188
+ def test_semver_caret_package_semver_wildcard
189
+ assert_equal true, node_package_version(fixture_version: "semver_caret").semver_wildcard?
190
+ end
191
+
192
+ def test_semver_tilde_package_raw
193
+ assert_equal "~6.0.0", node_package_version(fixture_version: "semver_tilde").raw
194
+ end
195
+
196
+ def test_semver_tilde_package_major_minor_patch
197
+ assert_equal ["6", "0", "0"], node_package_version(fixture_version: "semver_tilde").major_minor_patch
198
+ end
199
+
200
+ def test_semver_tilde_package_skip_processing
201
+ assert_equal false, node_package_version(fixture_version: "semver_tilde").skip_processing?
202
+ end
203
+
204
+ def test_semver_tilde_package_semver_wildcard
205
+ assert_equal true, node_package_version(fixture_version: "semver_tilde").semver_wildcard?
206
+ end
207
+
208
+ def test_relative_path_package_raw
209
+ assert_equal "../shakapacker", node_package_version(fixture_version: "relative_path").raw
210
+ end
211
+
212
+ def test_relative_path_package_major_minor_patch
213
+ assert_nil node_package_version(fixture_version: "relative_path").major_minor_patch
214
+ end
215
+
216
+ def test_relative_path_package_skip_processing
217
+ assert_equal true, node_package_version(fixture_version: "relative_path").skip_processing?
218
+ end
219
+
220
+ def test_relative_path_package_semver_wildcard
221
+ assert_equal false, node_package_version(fixture_version: "relative_path").semver_wildcard?
222
+ end
223
+
224
+ def test_git_url_package_raw
225
+ assert_equal "git://github.com/shakapacker/shakapacker.git", node_package_version(fixture_version: "git_url").raw
226
+ end
227
+
228
+ def test_git_url_package_major_minor_patch
229
+ assert_nil node_package_version(fixture_version: "git_url").major_minor_patch
230
+ end
231
+
232
+ def test_git_url_package_skip_processing
233
+ assert_equal true, node_package_version(fixture_version: "git_url").skip_processing?
234
+ end
235
+
236
+ def test_git_url_package_semver_wildcard
237
+ assert_equal false, node_package_version(fixture_version: "git_url").semver_wildcard?
238
+ end
239
+
240
+ def test_github_url_package_raw
241
+ assert_equal "shakapacker/shakapacker#feature/branch", node_package_version(fixture_version: "github_url").raw
242
+ end
243
+
244
+ def test_github_url_package_major_minor_patch
245
+ assert_nil node_package_version(fixture_version: "github_url").major_minor_patch
246
+ end
247
+
248
+ def test_github_url_package_skip_processing
249
+ assert_equal true, node_package_version(fixture_version: "github_url").skip_processing?
250
+ end
251
+
252
+ def test_github_url_package_semver_wildcard
253
+ assert_equal false, node_package_version(fixture_version: "github_url").semver_wildcard?
254
+ end
255
+
256
+ def test_without_package_raw
257
+ assert_equal "", node_package_version(fixture_version: "without").raw
258
+ end
259
+
260
+ def test_without_package_major_minor_patch
261
+ assert_nil node_package_version(fixture_version: "without").major_minor_patch
262
+ end
263
+
264
+ def test_without_package_skip_processing
265
+ assert_equal true, node_package_version(fixture_version: "without").skip_processing?
266
+ end
267
+
268
+ def test_without_package_semver_wildcard
269
+ assert_equal false, node_package_version(fixture_version: "without").semver_wildcard?
270
+ end
271
+ end
@@ -23,11 +23,26 @@ class WebpackerTest < Webpacker::Test
23
23
  def dev_server.https?; true; end
24
24
  def dev_server.hmr?; true; end
25
25
  def dev_server.running?; true; end
26
+ def dev_server.inline_css?; true; end
26
27
  Webpacker.instance.stub(:dev_server, dev_server) do
27
28
  assert Webpacker.inlining_css?
28
29
  end
29
30
  end
30
31
 
32
+ def test_explicit_no_inline_css_with_hmr
33
+ dev_server = Webpacker::DevServer.new({})
34
+ def dev_server.host; "localhost"; end
35
+ def dev_server.port; "3035"; end
36
+ def dev_server.pretty?; false; end
37
+ def dev_server.https?; true; end
38
+ def dev_server.hmr?; true; end
39
+ def dev_server.running?; true; end
40
+ def dev_server.inline_css?; false; end
41
+ Webpacker.instance.stub(:dev_server, dev_server) do
42
+ assert !Webpacker.inlining_css?
43
+ end
44
+ end
45
+
31
46
  def test_app_autoload_paths_cleanup
32
47
  assert_empty $test_app_autoload_paths_in_initializer
33
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shakapacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.1
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-02-07 00:00:00.000000000 Z
13
+ date: 2022-03-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -142,6 +142,7 @@ files:
142
142
  - docs/customizing_babel_config.md
143
143
  - docs/deployment.md
144
144
  - docs/developing_webpacker.md
145
+ - docs/style_loader_vs_mini_css.md
145
146
  - docs/troubleshooting.md
146
147
  - docs/using_esbuild_loader.md
147
148
  - docs/using_swc_loader.md
@@ -191,6 +192,7 @@ files:
191
192
  - lib/webpacker/railtie.rb
192
193
  - lib/webpacker/runner.rb
193
194
  - lib/webpacker/version.rb
195
+ - lib/webpacker/version_checker.rb
194
196
  - lib/webpacker/webpack_runner.rb
195
197
  - package.json
196
198
  - package/__tests__/config.js
@@ -214,6 +216,9 @@ files:
214
216
  - package/esbuild/index.js
215
217
  - package/index.js
216
218
  - package/inliningCss.js
219
+ - package/rules/__tests__/file.js
220
+ - package/rules/__tests__/index.js
221
+ - package/rules/__tests__/raw.js
217
222
  - package/rules/babel.js
218
223
  - package/rules/coffee.js
219
224
  - package/rules/css.js
@@ -237,6 +242,14 @@ files:
237
242
  - test/dev_server_test.rb
238
243
  - test/engine_rake_tasks_test.rb
239
244
  - test/env_test.rb
245
+ - test/fixtures/beta_package.json
246
+ - test/fixtures/git_url_package.json
247
+ - test/fixtures/github_url_package.json
248
+ - test/fixtures/normal_package.json
249
+ - test/fixtures/relative_path_package.json
250
+ - test/fixtures/semver_caret_package.json
251
+ - test/fixtures/semver_tilde_package.json
252
+ - test/fixtures/without_package.json
240
253
  - test/helper_test.rb
241
254
  - test/manifest_test.rb
242
255
  - test/mounted_app/Rakefile
@@ -261,6 +274,7 @@ files:
261
274
  - test/test_app/config/initializers/inspect_autoload_paths.rb
262
275
  - test/test_app/config/webpack/webpack.config.js
263
276
  - test/test_app/config/webpacker.yml
277
+ - test/test_app/config/webpacker_manifest_path.yml
264
278
  - test/test_app/config/webpacker_other_location.yml
265
279
  - test/test_app/config/webpacker_public_root.yml
266
280
  - test/test_app/package.json
@@ -268,6 +282,7 @@ files:
268
282
  - test/test_app/some.config.js
269
283
  - test/test_app/yarn.lock
270
284
  - test/test_helper.rb
285
+ - test/version_checker_test.rb
271
286
  - test/webpack_runner_test.rb
272
287
  - test/webpacker_test.rb
273
288
  - webpacker.gemspec
@@ -276,7 +291,7 @@ homepage: https://github.com/shakacode/shakapacker
276
291
  licenses:
277
292
  - MIT
278
293
  metadata:
279
- source_code_uri: https://github.com/shakacode/shakapacker/tree/v6.1.1
294
+ source_code_uri: https://github.com/shakacode/shakapacker/tree/v6.2.0
280
295
  post_install_message:
281
296
  rdoc_options: []
282
297
  require_paths:
@@ -304,6 +319,14 @@ test_files:
304
319
  - test/dev_server_test.rb
305
320
  - test/engine_rake_tasks_test.rb
306
321
  - test/env_test.rb
322
+ - test/fixtures/beta_package.json
323
+ - test/fixtures/git_url_package.json
324
+ - test/fixtures/github_url_package.json
325
+ - test/fixtures/normal_package.json
326
+ - test/fixtures/relative_path_package.json
327
+ - test/fixtures/semver_caret_package.json
328
+ - test/fixtures/semver_tilde_package.json
329
+ - test/fixtures/without_package.json
307
330
  - test/helper_test.rb
308
331
  - test/manifest_test.rb
309
332
  - test/mounted_app/Rakefile
@@ -328,6 +351,7 @@ test_files:
328
351
  - test/test_app/config/initializers/inspect_autoload_paths.rb
329
352
  - test/test_app/config/webpack/webpack.config.js
330
353
  - test/test_app/config/webpacker.yml
354
+ - test/test_app/config/webpacker_manifest_path.yml
331
355
  - test/test_app/config/webpacker_other_location.yml
332
356
  - test/test_app/config/webpacker_public_root.yml
333
357
  - test/test_app/package.json
@@ -335,5 +359,6 @@ test_files:
335
359
  - test/test_app/some.config.js
336
360
  - test/test_app/yarn.lock
337
361
  - test/test_helper.rb
362
+ - test/version_checker_test.rb
338
363
  - test/webpack_runner_test.rb
339
364
  - test/webpacker_test.rb