webpacker 5.2.1 → 6.0.0.beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -1
  3. data/.github/workflows/jest.yml +1 -1
  4. data/.github/workflows/js-lint.yml +1 -1
  5. data/.github/workflows/ruby.yml +9 -6
  6. data/.gitignore +2 -0
  7. data/.node-version +1 -1
  8. data/.rubocop.yml +11 -16
  9. data/6_0_upgrade.md +48 -0
  10. data/CHANGELOG.md +27 -0
  11. data/CONTRIBUTING.md +1 -1
  12. data/Gemfile.lock +23 -15
  13. data/README.md +252 -103
  14. data/config/README.md +3 -0
  15. data/config/webpacker.yml +1 -0
  16. data/lib/install/config/webpack/base.js +3 -0
  17. data/lib/install/config/webpack/development.js +2 -2
  18. data/lib/install/config/webpack/production.js +2 -2
  19. data/lib/install/config/webpack/test.js +2 -2
  20. data/lib/install/config/webpacker.yml +12 -39
  21. data/lib/install/{javascript/packs → packs/entrypoints}/application.js +5 -3
  22. data/lib/install/template.rb +36 -22
  23. data/lib/tasks/webpacker.rake +2 -11
  24. data/lib/tasks/webpacker/binstubs.rake +6 -4
  25. data/lib/tasks/webpacker/check_binstubs.rake +4 -4
  26. data/lib/tasks/webpacker/check_yarn.rake +1 -2
  27. data/lib/tasks/webpacker/compile.rake +4 -2
  28. data/lib/tasks/webpacker/info.rake +12 -10
  29. data/lib/tasks/webpacker/install.rake +6 -4
  30. data/lib/tasks/webpacker/verify_install.rake +2 -1
  31. data/lib/tasks/webpacker/yarn_install.rake +9 -1
  32. data/lib/webpacker/commands.rb +3 -2
  33. data/lib/webpacker/compiler.rb +16 -9
  34. data/lib/webpacker/configuration.rb +6 -30
  35. data/lib/webpacker/dev_server_runner.rb +23 -2
  36. data/lib/webpacker/helper.rb +26 -36
  37. data/lib/webpacker/manifest.rb +1 -1
  38. data/lib/webpacker/version.rb +1 -1
  39. data/lib/webpacker/webpack_runner.rb +6 -0
  40. data/package.json +23 -39
  41. data/package/__tests__/config.js +5 -37
  42. data/package/__tests__/development.js +11 -12
  43. data/package/__tests__/env.js +12 -4
  44. data/package/__tests__/index.js +9 -0
  45. data/package/__tests__/production.js +6 -6
  46. data/package/__tests__/staging.js +7 -6
  47. data/package/__tests__/test.js +4 -5
  48. data/package/babel/preset.js +55 -0
  49. data/package/config.js +3 -11
  50. data/package/env.js +8 -2
  51. data/package/environments/__tests__/base.js +19 -51
  52. data/package/environments/base.js +65 -125
  53. data/package/environments/development.js +46 -44
  54. data/package/environments/production.js +66 -64
  55. data/package/environments/test.js +2 -2
  56. data/package/index.js +13 -8
  57. data/package/rules/babel.js +9 -7
  58. data/package/rules/coffee.js +6 -0
  59. data/package/rules/erb.js +15 -0
  60. data/package/rules/file.js +21 -19
  61. data/package/rules/index.js +16 -18
  62. data/package/rules/less.js +22 -0
  63. data/package/rules/raw.js +5 -0
  64. data/package/rules/sass.js +12 -9
  65. data/package/rules/stylus.js +26 -0
  66. data/package/utils/get_style_rule.js +26 -36
  67. data/package/utils/helpers.js +26 -35
  68. data/test/compiler_test.rb +0 -12
  69. data/test/configuration_test.rb +3 -34
  70. data/test/dev_server_runner_test.rb +33 -6
  71. data/test/engine_rake_tasks_test.rb +39 -0
  72. data/test/helper_test.rb +15 -9
  73. data/test/mounted_app/Rakefile +4 -0
  74. data/test/mounted_app/test/dummy/Rakefile +3 -0
  75. data/test/mounted_app/test/dummy/bin/rails +3 -0
  76. data/test/mounted_app/test/dummy/bin/rake +3 -0
  77. data/test/mounted_app/test/dummy/config.ru +5 -0
  78. data/test/mounted_app/test/dummy/config/application.rb +10 -0
  79. data/test/mounted_app/test/dummy/config/environment.rb +3 -0
  80. data/test/mounted_app/test/dummy/config/webpacker.yml +75 -0
  81. data/test/mounted_app/test/dummy/package.json +7 -0
  82. data/test/rake_tasks_test.rb +1 -10
  83. data/test/test_app/app/{javascript/packs → packs/entrypoints}/application.js +1 -1
  84. data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.css +0 -0
  85. data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.js +0 -0
  86. data/test/test_app/config/webpacker.yml +3 -27
  87. data/test/test_app/config/webpacker_public_root.yml +0 -1
  88. data/test/test_app/public/packs/manifest.json +17 -13
  89. data/test/test_app/some.config.js +0 -0
  90. data/test/webpack_runner_test.rb +9 -3
  91. data/webpacker.gemspec +1 -1
  92. data/yarn.lock +1858 -4915
  93. metadata +54 -97
  94. data/.travis.yml +0 -43
  95. data/docs/assets.md +0 -119
  96. data/docs/cloud9.md +0 -310
  97. data/docs/css.md +0 -308
  98. data/docs/deployment.md +0 -130
  99. data/docs/docker.md +0 -68
  100. data/docs/engines.md +0 -213
  101. data/docs/env.md +0 -63
  102. data/docs/es6.md +0 -72
  103. data/docs/folder-structure.md +0 -66
  104. data/docs/integrations.md +0 -220
  105. data/docs/misc.md +0 -23
  106. data/docs/props.md +0 -223
  107. data/docs/target.md +0 -22
  108. data/docs/testing.md +0 -136
  109. data/docs/troubleshooting.md +0 -158
  110. data/docs/typescript.md +0 -190
  111. data/docs/v4-upgrade.md +0 -142
  112. data/docs/webpack-dev-server.md +0 -92
  113. data/docs/webpack.md +0 -364
  114. data/docs/yarn.md +0 -23
  115. data/lib/install/angular.rb +0 -23
  116. data/lib/install/coffee.rb +0 -25
  117. data/lib/install/config/.browserslistrc +0 -1
  118. data/lib/install/config/babel.config.js +0 -70
  119. data/lib/install/config/postcss.config.js +0 -12
  120. data/lib/install/config/webpack/environment.js +0 -3
  121. data/lib/install/elm.rb +0 -39
  122. data/lib/install/erb.rb +0 -25
  123. data/lib/install/examples/angular/hello_angular.js +0 -7
  124. data/lib/install/examples/angular/hello_angular/app/app.component.ts +0 -9
  125. data/lib/install/examples/angular/hello_angular/app/app.module.ts +0 -16
  126. data/lib/install/examples/angular/hello_angular/index.ts +0 -8
  127. data/lib/install/examples/angular/hello_angular/polyfills.ts +0 -73
  128. data/lib/install/examples/coffee/hello_coffee.coffee +0 -4
  129. data/lib/install/examples/elm/Main.elm +0 -55
  130. data/lib/install/examples/elm/hello_elm.js +0 -16
  131. data/lib/install/examples/erb/hello_erb.js.erb +0 -6
  132. data/lib/install/examples/react/babel.config.js +0 -87
  133. data/lib/install/examples/react/hello_react.jsx +0 -26
  134. data/lib/install/examples/react/tsconfig.json +0 -21
  135. data/lib/install/examples/stimulus/application.js +0 -1
  136. data/lib/install/examples/stimulus/controllers/hello_controller.js +0 -18
  137. data/lib/install/examples/stimulus/controllers/index.js +0 -9
  138. data/lib/install/examples/svelte/app.svelte +0 -11
  139. data/lib/install/examples/svelte/hello_svelte.js +0 -20
  140. data/lib/install/examples/typescript/hello_typescript.ts +0 -4
  141. data/lib/install/examples/typescript/tsconfig.json +0 -24
  142. data/lib/install/examples/vue/app.vue +0 -22
  143. data/lib/install/examples/vue/hello_vue.js +0 -72
  144. data/lib/install/loaders/coffee.js +0 -6
  145. data/lib/install/loaders/elm.js +0 -25
  146. data/lib/install/loaders/erb.js +0 -11
  147. data/lib/install/loaders/svelte.js +0 -9
  148. data/lib/install/loaders/vue.js +0 -6
  149. data/lib/install/react.rb +0 -18
  150. data/lib/install/stimulus.rb +0 -12
  151. data/lib/install/svelte.rb +0 -29
  152. data/lib/install/typescript.rb +0 -39
  153. data/lib/install/vue.rb +0 -49
  154. data/lib/tasks/installers.rake +0 -42
  155. data/package/config_types/__tests__/config_list.js +0 -118
  156. data/package/config_types/__tests__/config_object.js +0 -43
  157. data/package/config_types/config_list.js +0 -75
  158. data/package/config_types/config_object.js +0 -55
  159. data/package/config_types/index.js +0 -7
  160. data/package/rules/module.css.js +0 -3
  161. data/package/rules/module.sass.js +0 -8
  162. data/package/rules/node_modules.js +0 -22
  163. data/package/utils/__tests__/deep_assign.js +0 -32
  164. data/package/utils/__tests__/deep_merge.js +0 -10
  165. data/package/utils/__tests__/get_style_rule.js +0 -65
  166. data/package/utils/__tests__/objectify.js +0 -9
  167. data/package/utils/deep_assign.js +0 -22
  168. data/package/utils/deep_merge.js +0 -22
  169. data/package/utils/objectify.js +0 -3
@@ -23,16 +23,8 @@ class Webpacker::Configuration
23
23
  root_path.join(fetch(:source_path))
24
24
  end
25
25
 
26
- def source_path_globbed
27
- globbed_path_with_extensions(source_path.relative_path_from(root_path))
28
- end
29
-
30
26
  def additional_paths
31
- fetch(:additional_paths) + resolved_paths
32
- end
33
-
34
- def additional_paths_globbed
35
- additional_paths.map { |p| globbed_path_with_extensions(p) }
27
+ fetch(:additional_paths)
36
28
  end
37
29
 
38
30
  def source_entry_path
@@ -59,31 +51,19 @@ class Webpacker::Configuration
59
51
  root_path.join(fetch(:cache_path))
60
52
  end
61
53
 
62
- def extensions
63
- fetch(:extensions)
64
- end
65
-
66
54
  def check_yarn_integrity=(value)
67
- warn "Webpacker::Configuration#check_yarn_integrity=(value) has been deprecated. The integrity check has been removed from Webpacker so changing this setting will have no effect."
55
+ warn <<~EOS
56
+ Webpacker::Configuration#check_yarn_integrity=(value) is obsolete. The integrity
57
+ check has been removed from Webpacker (https://github.com/rails/webpacker/pull/2518)
58
+ so changing this setting will have no effect.
59
+ EOS
68
60
  end
69
61
 
70
62
  def webpack_compile_output?
71
63
  fetch(:webpack_compile_output)
72
64
  end
73
65
 
74
- def extract_css?
75
- fetch(:extract_css)
76
- end
77
-
78
66
  private
79
- def resolved_paths
80
- paths = data.fetch(:resolved_paths, [])
81
-
82
- warn "The resolved_paths option has been deprecated. Use additional_paths instead." unless paths.empty?
83
-
84
- paths
85
- end
86
-
87
67
  def fetch(key)
88
68
  data.fetch(key, defaults[key])
89
69
  end
@@ -110,8 +90,4 @@ class Webpacker::Configuration
110
90
  @defaults ||= \
111
91
  HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/webpacker.yml", __FILE__))[env])
112
92
  end
113
-
114
- def globbed_path_with_extensions(path)
115
- "#{path}/**/*{#{extensions.join(',')}}"
116
- end
117
93
  end
@@ -8,11 +8,13 @@ module Webpacker
8
8
  class DevServerRunner < Webpacker::Runner
9
9
  def run
10
10
  load_config
11
+ detect_unsupported_switches!
11
12
  detect_port!
12
13
  execute_cmd
13
14
  end
14
15
 
15
16
  private
17
+
16
18
  def load_config
17
19
  app_root = Pathname.new(@app_path)
18
20
 
@@ -27,6 +29,7 @@ module Webpacker
27
29
  @hostname = dev_server.host
28
30
  @port = dev_server.port
29
31
  @pretty = dev_server.pretty?
32
+ @https = dev_server.https?
30
33
 
31
34
  rescue Errno::ENOENT, NoMethodError
32
35
  $stdout.puts "webpack dev_server configuration not found in #{@config.config_path}[#{ENV["RAILS_ENV"]}]."
@@ -34,6 +37,21 @@ module Webpacker
34
37
  exit!
35
38
  end
36
39
 
40
+ UNSUPPORTED_SWITCHES = %w[--host --port]
41
+ private_constant :UNSUPPORTED_SWITCHES
42
+ def detect_unsupported_switches!
43
+ unsupported_switches = UNSUPPORTED_SWITCHES & @argv
44
+ if unsupported_switches.any?
45
+ $stdout.puts "The following CLI switches are not supported by Webpacker: #{unsupported_switches.join(' ')}. Please edit your command and try again."
46
+ exit!
47
+ end
48
+
49
+ if @argv.include?("--https") && !@https
50
+ $stdout.puts "Please set https: true in webpacker.yml to use the --https command line flag."
51
+ exit!
52
+ end
53
+ end
54
+
37
55
  def detect_port!
38
56
  server = TCPServer.new(@hostname, @port)
39
57
  server.close
@@ -46,19 +64,22 @@ module Webpacker
46
64
  def execute_cmd
47
65
  env = Webpacker::Compiler.env
48
66
  env["WEBPACKER_CONFIG"] = @webpacker_config
67
+ env["WEBPACK_DEV_SERVER"] = "true"
49
68
 
50
69
  cmd = if node_modules_bin_exist?
51
- ["#{@node_modules_bin_path}/webpack-dev-server"]
70
+ ["#{@node_modules_bin_path}/webpack", "serve"]
52
71
  else
53
- ["yarn", "webpack-dev-server"]
72
+ ["yarn", "webpack", "serve"]
54
73
  end
55
74
 
56
75
  if @argv.include?("--debug-webpacker")
57
76
  cmd = [ "node", "--inspect-brk"] + cmd
77
+ @argv.delete "--debug-webpacker"
58
78
  end
59
79
 
60
80
  cmd += ["--config", @webpack_config]
61
81
  cmd += ["--progress", "--color"] if @pretty
82
+ cmd += @argv
62
83
 
63
84
  Dir.chdir(@app_path) do
64
85
  Kernel.exec env, *cmd
@@ -12,15 +12,9 @@ module Webpacker::Helper
12
12
  #
13
13
  # Example:
14
14
  #
15
- # # When extract_css is false in webpacker.yml and the file is a css:
16
- # <%= asset_pack_path 'calendar.css' %> # => nil
17
- #
18
- # # When extract_css is true in webpacker.yml or the file is not a css:
19
15
  # <%= asset_pack_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
20
16
  def asset_pack_path(name, **options)
21
- if current_webpacker_instance.config.extract_css? || !stylesheet?(name)
22
- path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
23
- end
17
+ path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
24
18
  end
25
19
 
26
20
  # Computes the absolute path for a given Webpacker asset.
@@ -29,15 +23,24 @@ module Webpacker::Helper
29
23
  #
30
24
  # Example:
31
25
  #
32
- # # When extract_css is false in webpacker.yml and the file is a css:
33
- # <%= asset_pack_url 'calendar.css' %> # => nil
34
- #
35
- # # When extract_css is true in webpacker.yml or the file is not a css:
36
26
  # <%= asset_pack_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
37
27
  def asset_pack_url(name, **options)
38
- if current_webpacker_instance.config.extract_css? || !stylesheet?(name)
39
- url_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
40
- end
28
+ url_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
29
+ end
30
+
31
+ # Computes the relative path for a given Webpacker image with the same automated processing as image_pack_tag.
32
+ # Returns the relative path using manifest.json and passes it to path_to_asset helper.
33
+ # This will use path_to_asset internally, so most of their behaviors will be the same.
34
+ def image_pack_path(name, **options)
35
+ resolve_path_to_image(name, **options)
36
+ end
37
+
38
+ # Computes the absolute path for a given Webpacker image with the same automated
39
+ # processing as image_pack_tag. Returns the relative path using manifest.json
40
+ # and passes it to path_to_asset helper. This will use path_to_asset internally,
41
+ # so most of their behaviors will be the same.
42
+ def image_pack_url(name, **options)
43
+ resolve_path_to_image(name, **options.merge(protocol: :request))
41
44
  end
42
45
 
43
46
  # Creates an image tag that references the named pack file.
@@ -71,7 +74,7 @@ module Webpacker::Helper
71
74
 
72
75
  # Creates a script tag that references the named pack file, as compiled by webpack per the entries list
73
76
  # in package/environments/base.js. By default, this list is auto-generated to match everything in
74
- # app/javascript/packs/*.js. In production mode, the digested reference is automatically looked up.
77
+ # app/packs/entrypoints/*.js. In production mode, the digested reference is automatically looked up.
75
78
  #
76
79
  # Example:
77
80
  #
@@ -84,7 +87,7 @@ module Webpacker::Helper
84
87
  # Creates script tags that reference the js chunks from entrypoints when using split chunks API,
85
88
  # as compiled by webpack per the entries list in package/environments/base.js.
86
89
  # By default, this list is auto-generated to match everything in
87
- # app/javascript/packs/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
90
+ # app/packs/entrypoints/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
88
91
  # See: https://webpack.js.org/plugins/split-chunks-plugin/
89
92
  #
90
93
  # Example:
@@ -126,30 +129,23 @@ module Webpacker::Helper
126
129
 
127
130
  # Creates a link tag that references the named pack file, as compiled by webpack per the entries list
128
131
  # in package/environments/base.js. By default, this list is auto-generated to match everything in
129
- # app/javascript/packs/*.js. In production mode, the digested reference is automatically looked up.
132
+ # app/packs/entrypoints/*.js. In production mode, the digested reference is automatically looked up.
130
133
  #
131
134
  # Note: If the development server is running and hot module replacement is active, this will return nothing.
132
135
  # In that setup you need to configure your styles to be inlined in your JavaScript for hot reloading.
133
136
  #
134
137
  # Examples:
135
138
  #
136
- # # When extract_css is false in webpacker.yml:
137
- # <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
138
- # nil
139
- #
140
- # # When extract_css is true in webpacker.yml:
141
139
  # <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
142
140
  # <link rel="stylesheet" media="screen" href="/packs/calendar-1016838bab065ae1e122.css" data-turbolinks-track="reload" />
143
141
  def stylesheet_pack_tag(*names, **options)
144
- if current_webpacker_instance.config.extract_css?
145
- stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
146
- end
142
+ stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
147
143
  end
148
144
 
149
145
  # Creates link tags that reference the css chunks from entrypoints when using split chunks API,
150
146
  # as compiled by webpack per the entries list in package/environments/base.js.
151
147
  # By default, this list is auto-generated to match everything in
152
- # app/javascript/packs/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
148
+ # app/packs/entrypoints/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
153
149
  # See: https://webpack.js.org/plugins/split-chunks-plugin/
154
150
  #
155
151
  # Examples:
@@ -168,16 +164,10 @@ module Webpacker::Helper
168
164
  # <%= stylesheet_packs_with_chunks_tag 'calendar' %>
169
165
  # <%= stylesheet_packs_with_chunks_tag 'map' %>
170
166
  def stylesheet_packs_with_chunks_tag(*names, **options)
171
- if current_webpacker_instance.config.extract_css?
172
- stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
173
- end
167
+ stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
174
168
  end
175
169
 
176
170
  private
177
- def stylesheet?(name)
178
- File.extname(name) == ".css"
179
- end
180
-
181
171
  def sources_from_manifest_entries(names, type:)
182
172
  names.map { |name| current_webpacker_instance.manifest.lookup!(name, type: type) }.flatten
183
173
  end
@@ -186,10 +176,10 @@ module Webpacker::Helper
186
176
  names.map { |name| current_webpacker_instance.manifest.lookup_pack_with_chunks!(name, type: type) }.flatten.uniq
187
177
  end
188
178
 
189
- def resolve_path_to_image(name)
179
+ def resolve_path_to_image(name, **options)
190
180
  path = name.starts_with?("media/images/") ? name : "media/images/#{name}"
191
- path_to_asset(current_webpacker_instance.manifest.lookup!(path))
181
+ path_to_asset(current_webpacker_instance.manifest.lookup!(path), options)
192
182
  rescue
193
- path_to_asset(current_webpacker_instance.manifest.lookup!(name))
183
+ path_to_asset(current_webpacker_instance.manifest.lookup!(name), options)
194
184
  end
195
185
  end
@@ -23,7 +23,7 @@ class Webpacker::Manifest
23
23
 
24
24
  manifest_pack_type = manifest_type(pack_type[:type])
25
25
  manifest_pack_name = manifest_name(name, manifest_pack_type)
26
- find("entrypoints")[manifest_pack_name][manifest_pack_type]
26
+ find("entrypoints")[manifest_pack_name]["assets"][manifest_pack_type]
27
27
  rescue NoMethodError
28
28
  nil
29
29
  end
@@ -1,4 +1,4 @@
1
1
  module Webpacker
2
2
  # Change the version in package.json too, please!
3
- VERSION = "5.2.1".freeze
3
+ VERSION = "6.0.0.beta.4".freeze
4
4
  end
@@ -15,6 +15,12 @@ module Webpacker
15
15
 
16
16
  if @argv.include?("--debug-webpacker")
17
17
  cmd = [ "node", "--inspect-brk"] + cmd
18
+ @argv.delete "--debug-webpacker"
19
+ end
20
+
21
+ if @argv.include?("--trace-deprecation")
22
+ cmd = [ "node", "--trace-deprecation"] + cmd
23
+ @argv.delete "--trace-deprecation"
18
24
  end
19
25
 
20
26
  cmd += ["--config", @webpack_config] + @argv
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rails/webpacker",
3
- "version": "5.2.1",
3
+ "version": "6.0.0-beta.4",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "main": "package/index.js",
6
6
  "files": [
@@ -8,56 +8,40 @@
8
8
  "lib/install/config/webpacker.yml"
9
9
  ],
10
10
  "engines": {
11
- "node": ">=10.17.0",
12
- "yarn": ">=1 <2"
11
+ "node": ">=10.22.1 || ^12 || >=14",
12
+ "yarn": ">=1 <3"
13
13
  },
14
14
  "dependencies": {
15
- "@babel/core": "^7.11.1",
16
- "@babel/plugin-proposal-class-properties": "^7.10.4",
17
- "@babel/plugin-proposal-object-rest-spread": "^7.10.1",
18
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
19
- "@babel/plugin-transform-destructuring": "^7.10.1",
20
- "@babel/plugin-transform-regenerator": "^7.10.1",
21
- "@babel/plugin-transform-runtime": "^7.11.0",
22
- "@babel/preset-env": "^7.11.0",
23
- "@babel/runtime": "^7.11.2",
24
- "babel-loader": "^8.1.0",
25
- "babel-plugin-dynamic-import-node": "^2.3.3",
26
- "babel-plugin-macros": "^2.8.0",
15
+ "@babel/core": "^7.12.9",
16
+ "@babel/plugin-proposal-class-properties": "^7.12.1",
17
+ "@babel/plugin-transform-runtime": "^7.12.1",
18
+ "@babel/preset-env": "^7.12.11",
19
+ "@babel/runtime": "^7.12.5",
20
+ "babel-loader": "^8.2.2",
21
+ "babel-plugin-macros": "^3.0.1",
27
22
  "case-sensitive-paths-webpack-plugin": "^2.3.0",
28
- "compression-webpack-plugin": "^4.0.0",
29
- "core-js": "^3.6.5",
30
- "css-loader": "^3.5.3",
31
- "file-loader": "^6.0.0",
32
- "flatted": "^3.0.4",
23
+ "compression-webpack-plugin": "^7.1.0",
24
+ "core-js": "^3.8.0",
33
25
  "glob": "^7.1.6",
34
26
  "js-yaml": "^3.14.0",
35
- "mini-css-extract-plugin": "^0.9.0",
36
- "node-sass": "^4.14.1",
37
- "optimize-css-assets-webpack-plugin": "^5.0.3",
38
27
  "path-complete-extname": "^1.0.0",
39
28
  "pnp-webpack-plugin": "^1.6.4",
40
- "postcss-flexbugs-fixes": "^4.2.1",
41
- "postcss-import": "^12.0.1",
42
- "postcss-loader": "^3.0.0",
43
- "postcss-preset-env": "^6.7.0",
44
- "postcss-safe-parser": "^4.0.2",
45
29
  "regenerator-runtime": "^0.13.7",
46
- "sass-loader": "^8.0.2",
47
- "style-loader": "^1.2.1",
48
- "terser-webpack-plugin": "^4.0.0",
49
- "webpack": "^4.44.1",
50
- "webpack-assets-manifest": "^3.1.1",
51
- "webpack-cli": "^3.3.12",
52
- "webpack-sources": "^1.4.3"
30
+ "terser-webpack-plugin": "^5.0.3",
31
+ "webpack": "^5.11.0",
32
+ "webpack-assets-manifest": "^5.0.0",
33
+ "webpack-cli": "^4.2.0",
34
+ "webpack-merge": "^5.7.2",
35
+ "webpack-sources": "^2.2.0"
53
36
  },
54
37
  "devDependencies": {
55
- "eslint": "^7.6.0",
38
+ "eslint": "^7.16.0",
56
39
  "eslint-config-airbnb": "^18.2.0",
57
- "eslint-plugin-import": "^2.22.0",
40
+ "eslint-config-prettier": "^7.1.0",
41
+ "eslint-plugin-import": "^2.22.1",
58
42
  "eslint-plugin-jsx-a11y": "^6.3.1",
59
- "eslint-plugin-react": "^7.20.5",
60
- "jest": "^26.2.2"
43
+ "eslint-plugin-react": "^7.21.4",
44
+ "jest": "^26.5.3"
61
45
  },
62
46
  "jest": {
63
47
  "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
@@ -24,43 +24,11 @@ describe('Config', () => {
24
24
  })
25
25
 
26
26
  test('should return additional paths as listed in app config, with resolved paths', () => {
27
- expect(config.additional_paths).toEqual(
28
- [
29
- 'app/assets',
30
- '/etc/yarn',
31
- 'app/elm'
32
- ]
33
- )
34
- })
35
-
36
- test('should return extensions as listed in app config', () => {
37
- expect(config.extensions).toEqual([
38
- '.mjs',
39
- '.js',
40
- '.sass',
41
- '.scss',
42
- '.css',
43
- '.module.sass',
44
- '.module.scss',
45
- '.module.css',
46
- '.png',
47
- '.svg',
48
- '.gif',
49
- '.jpeg',
50
- '.jpg',
51
- '.elm'
52
- ])
53
- })
54
-
55
- test('should return static assets extensions as listed in app config', () => {
56
- expect(config.static_assets_extensions).toEqual([
57
- '.jpg',
58
- '.jpeg',
59
- '.png',
60
- '.gif',
61
- '.tiff',
62
- '.ico',
63
- '.svg',
27
+ expect(config.additional_paths).toEqual([
28
+ 'app/assets',
29
+ '/etc/yarn',
30
+ 'some.config.js',
31
+ 'app/elm'
64
32
  ])
65
33
  })
66
34
  })
@@ -8,22 +8,22 @@ chdirTestApp()
8
8
  describe('Development environment', () => {
9
9
  afterAll(chdirCwd)
10
10
 
11
- describe('toWebpackConfig', () => {
11
+ describe('webpackConfig', () => {
12
12
  beforeEach(() => jest.resetModules())
13
13
 
14
14
  test('should use development config and environment including devServer if WEBPACK_DEV_SERVER', () => {
15
15
  process.env.RAILS_ENV = 'development'
16
16
  process.env.NODE_ENV = 'development'
17
17
  process.env.WEBPACK_DEV_SERVER = 'YES'
18
- const { environment } = require('../index')
18
+ const { webpackConfig } = require('../index')
19
19
 
20
- const config = environment.toWebpackConfig()
21
- expect(config.output.path).toEqual(resolve('public', 'packs'))
22
- expect(config.output.publicPath).toEqual('/packs/')
23
- expect(config).toMatchObject({
20
+ expect(webpackConfig.output.path).toEqual(resolve('public', 'packs'))
21
+ expect(webpackConfig.output.publicPath).toEqual('/packs/')
22
+ expect(webpackConfig).toMatchObject({
24
23
  devServer: {
25
24
  host: 'localhost',
26
- port: 3035
25
+ port: 3035,
26
+ injectClient: true
27
27
  }
28
28
  })
29
29
  })
@@ -32,12 +32,11 @@ describe('Development environment', () => {
32
32
  process.env.RAILS_ENV = 'development'
33
33
  process.env.NODE_ENV = 'development'
34
34
  process.env.WEBPACK_DEV_SERVER = undefined
35
- const { environment } = require('../index')
35
+ const { webpackConfig } = require('../index')
36
36
 
37
- const config = environment.toWebpackConfig()
38
- expect(config.output.path).toEqual(resolve('public', 'packs'))
39
- expect(config.output.publicPath).toEqual('/packs/')
40
- expect(config.devServer).toEqual(undefined)
37
+ expect(webpackConfig.output.path).toEqual(resolve('public', 'packs'))
38
+ expect(webpackConfig.output.publicPath).toEqual('/packs/')
39
+ expect(webpackConfig.devServer).toEqual(undefined)
41
40
  })
42
41
  })
43
42
  })