react_on_rails 12.5.0 → 13.0.0.beta.0

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -1
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +23 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.github/workflows/main.yml +3 -3
  6. data/.gitignore +0 -3
  7. data/.prettierignore +2 -0
  8. data/CHANGELOG.md +22 -3
  9. data/Gemfile.development_dependencies +6 -6
  10. data/README.md +10 -15
  11. data/docs/deployment/heroku-deployment.md +1 -1
  12. data/docs/guides/configuration.md +23 -8
  13. data/docs/guides/hmr-and-hot-reloading-with-the-webpack-dev-server.md +4 -4
  14. data/docs/guides/how-react-on-rails-works.md +1 -1
  15. data/docs/guides/rspec-configuration.md +1 -1
  16. data/docs/guides/tutorial.md +15 -19
  17. data/docs/guides/upgrading-react-on-rails.md +15 -0
  18. data/docs/guides/webpack-configuration.md +1 -1
  19. data/docs/javascript/converting-from-custom-webpack-config-to-rails-webpacker-config.md +2 -2
  20. data/lib/generators/react_on_rails/base_generator.rb +9 -8
  21. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +2 -2
  22. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-static +2 -2
  23. data/lib/generators/react_on_rails/templates/base/base/babel.config.js.tt +25 -8
  24. data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +2 -2
  25. data/lib/generators/react_on_rails/templates/base/base/config/webpack/commonWebpackConfig.js.tt +1 -1
  26. data/lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt +1 -1
  27. data/lib/generators/react_on_rails/templates/base/base/config/webpack/serverWebpackConfig.js.tt +1 -1
  28. data/lib/generators/react_on_rails/templates/base/base/config/webpack/webpack.config.js.tt +15 -0
  29. data/lib/generators/react_on_rails/templates/base/base/config/webpacker.yml +2 -2
  30. data/lib/react_on_rails/configuration.rb +40 -41
  31. data/lib/react_on_rails/helper.rb +3 -3
  32. data/lib/react_on_rails/locales/base.rb +1 -3
  33. data/lib/react_on_rails/react_component/render_options.rb +14 -0
  34. data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +8 -6
  35. data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +3 -3
  36. data/lib/react_on_rails/test_helper.rb +2 -2
  37. data/lib/react_on_rails/version.rb +1 -1
  38. data/lib/react_on_rails/webpacker_utils.rb +2 -7
  39. data/lib/tasks/assets.rake +1 -42
  40. data/lib/tasks/locale.rake +1 -2
  41. data/package.json +1 -1
  42. data/rakelib/example_type.rb +5 -2
  43. data/rakelib/examples.rake +3 -10
  44. data/rakelib/release.rake +6 -0
  45. data/rakelib/task_helpers.rb +0 -7
  46. data/react_on_rails.gemspec +1 -2
  47. data/yarn.lock +117 -71
  48. metadata +10 -21
@@ -1,15 +1,32 @@
1
1
  <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/babel.config.js") %>
2
2
 
3
- const defaultConfigFunc = require('@rails/webpacker/package/babel/preset.js');
4
-
5
3
  module.exports = function (api) {
6
- const resultConfig = defaultConfigFunc(api);
4
+ const defaultConfigFunc = require('shakapacker/package/babel/preset.js')
5
+ const resultConfig = defaultConfigFunc(api)
6
+ const isProductionEnv = api.env('production')
7
7
 
8
8
  const changesOnDefault = {
9
- plugins: [process.env.WEBPACK_SERVE && 'react-refresh/babel'].filter(Boolean),
10
- };
9
+ presets: [
10
+ [
11
+ '@babel/preset-react',
12
+ {
13
+ development: !isProductionEnv,
14
+ useBuiltIns: true
15
+ }
16
+ ]
17
+ ].filter(Boolean),
18
+ plugins: [
19
+ process.env.WEBPACK_SERVE && 'react-refresh/babel',
20
+ isProductionEnv && ['babel-plugin-transform-react-remove-prop-types',
21
+ {
22
+ removeImport: true
23
+ }
24
+ ]
25
+ ].filter(Boolean),
26
+ }
11
27
 
12
- resultConfig.plugins = [...resultConfig.plugins, ...changesOnDefault.plugins];
28
+ resultConfig.presets = [...resultConfig.presets, ...changesOnDefault.presets]
29
+ resultConfig.plugins = [...resultConfig.plugins, ...changesOnDefault.plugins ]
13
30
 
14
- return resultConfig;
15
- };
31
+ return resultConfig
32
+ }
@@ -6,7 +6,7 @@
6
6
  ReactOnRails.configure do |config|
7
7
  # This configures the script to run to build the production assets by webpack. Set this to nil
8
8
  # if you don't want react_on_rails building this file for you.
9
- # If nil, then the standard rails/webpacker assets:precompile will run
9
+ # If nil, then the standard shakacode/shakapacker assets:precompile will run
10
10
  # config.build_production_command = nil
11
11
 
12
12
  ################################################################################
@@ -25,7 +25,7 @@ ReactOnRails.configure do |config|
25
25
  #
26
26
  # Alternately, you can remove the `ReactOnRails::TestHelper.configure_rspec_to_compile_assets`
27
27
  # and set the config/webpacker.yml option for test to true.
28
- config.build_test_command = "RAILS_ENV=test bin/webpack"
28
+ config.build_test_command = "RAILS_ENV=test bin/webpacker"
29
29
 
30
30
  ################################################################################
31
31
  ################################################################################
@@ -1,7 +1,7 @@
1
1
  <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/commonWebpackConfig.js") %>
2
2
 
3
3
  // Common configuration applying to client and server configuration
4
- const { webpackConfig: baseClientWebpackConfig, merge } = require('@rails/webpacker');
4
+ const { webpackConfig: baseClientWebpackConfig, merge } = require('shakapacker');
5
5
 
6
6
  const commonOptions = {
7
7
  resolve: {
@@ -2,7 +2,7 @@
2
2
 
3
3
  process.env.NODE_ENV = process.env.NODE_ENV || 'development';
4
4
 
5
- const { devServer, inliningCss } = require('@rails/webpacker');
5
+ const { devServer, inliningCss } = require('shakapacker');
6
6
 
7
7
  const webpackConfig = require('./webpackConfig');
8
8
 
@@ -1,6 +1,6 @@
1
1
  <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/serverWebpackConfig.js") %>
2
2
 
3
- const { merge, config } = require('@rails/webpacker');
3
+ const { merge, config } = require('shakapacker');
4
4
  const commonWebpackConfig = require('./commonWebpackConfig');
5
5
 
6
6
  const webpack = require('webpack');
@@ -0,0 +1,15 @@
1
+ const { env, webpackConfig } = require('shakapacker')
2
+ const { existsSync } = require('fs')
3
+ const { resolve } = require('path')
4
+
5
+ const envSpecificConfig = () => {
6
+ const path = resolve(__dirname, `${env.nodeEnv}.js`)
7
+ if (existsSync(path)) {
8
+ console.log(`Loading ENV specific webpack configuration file ${path}`)
9
+ return require(path)
10
+ } else {
11
+ return webpackConfig
12
+ }
13
+ }
14
+
15
+ module.exports = envSpecificConfig()
@@ -1,4 +1,4 @@
1
- # Note: You must restart bin/webpack-dev-server for changes to take effect
1
+ # Note: You must restart bin/webpacker-dev-server for changes to take effect
2
2
 
3
3
  default: &default
4
4
  source_path: app/javascript
@@ -17,7 +17,7 @@ default: &default
17
17
 
18
18
  development:
19
19
  <<: *default
20
- # This is false since we're running `bin/webpack -w` in Procfile.dev-setic
20
+ # This is false since we're running `bin/webpacker -w` in Procfile.dev-setic
21
21
  compile: false
22
22
 
23
23
  # Reference: https://webpack.js.org/configuration/dev-server/
@@ -32,6 +32,7 @@ module ReactOnRails
32
32
  # skip_display_none is deprecated
33
33
  webpack_generated_files: %w[manifest.json],
34
34
  rendering_extension: nil,
35
+ rendering_props_extension: nil,
35
36
  server_render_method: nil,
36
37
  build_test_command: "",
37
38
  build_production_command: "",
@@ -51,7 +52,7 @@ module ReactOnRails
51
52
  :build_production_command,
52
53
  :i18n_dir, :i18n_yml_dir, :i18n_output_format,
53
54
  :server_render_method, :random_dom_id,
54
- :same_bundle_for_client_and_server
55
+ :same_bundle_for_client_and_server, :rendering_props_extension
55
56
 
56
57
  # rubocop:disable Metrics/AbcSize
57
58
  def initialize(node_modules_location: nil, server_bundle_js_file: nil, prerender: nil,
@@ -65,7 +66,7 @@ module ReactOnRails
65
66
  build_production_command: nil,
66
67
  same_bundle_for_client_and_server: nil,
67
68
  i18n_dir: nil, i18n_yml_dir: nil, i18n_output_format: nil,
68
- random_dom_id: nil, server_render_method: nil)
69
+ random_dom_id: nil, server_render_method: nil, rendering_props_extension: nil)
69
70
  self.node_modules_location = node_modules_location.present? ? node_modules_location : Rails.root
70
71
  self.generated_assets_dirs = generated_assets_dirs
71
72
  self.generated_assets_dir = generated_assets_dir
@@ -87,6 +88,7 @@ module ReactOnRails
87
88
  self.trace = trace.nil? ? Rails.env.development? : trace
88
89
  self.raise_on_prerender_error = raise_on_prerender_error
89
90
  self.skip_display_none = skip_display_none
91
+ self.rendering_props_extension = rendering_props_extension
90
92
 
91
93
  # Server rendering:
92
94
  self.server_bundle_js_file = server_bundle_js_file
@@ -111,44 +113,41 @@ module ReactOnRails
111
113
  check_i18n_yml_directory_exists
112
114
  check_server_render_method_is_only_execjs
113
115
  error_if_using_webpacker_and_generated_assets_dir_not_match_public_output_path
114
- check_deprecated_settings
116
+ # check_deprecated_settings
117
+ adjust_precompile_task
115
118
  end
116
119
 
117
120
  private
118
121
 
119
- def check_deprecated_settings
120
- if build_production_command.present? &&
121
- ReactOnRails::WebpackerUtils.webpacker_webpack_production_config_exists?
122
- msg = <<~MSG
123
- Setting ReactOnRails configuration for `build_production_command` is
124
- not necessary if you have config/webpack/production.js. When that file
125
- exists, React on Rails DOES NOT modify the standard assets:precompile.
126
- If you want React on Rails to modify to the standard assets:precompile
127
- to use your config/initializers/react_on_rails.rb config.build_production_command
128
- then delete the config/webpack/production.js.
129
- MSG
130
- Rails.logger.warn(msg)
122
+ def adjust_precompile_task
123
+ skip_react_on_rails_precompile = %w[no false n f].include?(ENV["REACT_ON_RAILS_PRECOMPILE"])
124
+
125
+ return if skip_react_on_rails_precompile || build_production_command.blank?
126
+
127
+ # Ensure that shakacode/shakapacker does not call bin/webpacker if we're providing
128
+ # the build command.
129
+ ENV["WEBPACKER_PRECOMPILE"] = "false"
130
+
131
+ precompile_tasks = lambda {
132
+ Rake::Task["react_on_rails:assets:webpack"].invoke
133
+ puts "Invoking task webpacker:clean from React on Rails"
134
+
135
+ # VERSIONS is per the shakacode/shakapacker clean method definition.
136
+ # We set it very big so that it is not used, and then clean just
137
+ # removes files older than 1 hour.
138
+ versions = 100_000
139
+ Rake::Task["webpacker:clean"].invoke(versions)
140
+ }
141
+
142
+ if Rake::Task.task_defined?("assets:precompile")
143
+ Rake::Task["assets:precompile"].enhance do
144
+ precompile_tasks.call
145
+ end
146
+ else
147
+ Rake::Task.define_task("assets:precompile") do
148
+ precompile_tasks.call
149
+ end
131
150
  end
132
- #
133
- # msg = <<~MSG
134
- # ReactOnRails configuration for `build_production_command` is removed.
135
- # Move this command into `bin/webpack` converting the script to a shell script.
136
- # MSG
137
- # raise ReactOnRails::Error, msg
138
- # Commenting out until v13 when
139
- # https://github.com/rails/webpacker/issues/2640 gets resolved
140
- # if node_modules_location.present?
141
- # Rails.logger.warn("ReactOnRails configuration for `node_modules_location` is deprecated. "\
142
- # "Instead, prepend a `cd client` (or whichever location) before your test command.")
143
- # end
144
- #
145
- # return unless build_production_command.present?
146
- #
147
- # msg = <<~MSG
148
- # ReactOnRails configuration for `build_production_command` is removed.
149
- # Move this command into `bin/webpack` converting the script to a shell script.
150
- # MSG
151
- # raise ReactOnRails::Error, msg
152
151
  end
153
152
 
154
153
  def error_if_using_webpacker_and_generated_assets_dir_not_match_public_output_path
@@ -160,7 +159,7 @@ module ReactOnRails
160
159
 
161
160
  if File.expand_path(generated_assets_dir) == webpacker_public_output_path.to_s
162
161
  Rails.logger.warn("You specified generated_assets_dir in `config/initializers/react_on_rails.rb` "\
163
- "with Webpacker. Remove this line from your configuration file.")
162
+ "with Webpacker. Remove this line from your configuration file.")
164
163
  else
165
164
  msg = <<~MSG
166
165
  Error configuring /config/initializers/react_on_rails.rb: You are using webpacker
@@ -222,19 +221,19 @@ module ReactOnRails
222
221
  if ReactOnRails::WebpackerUtils.using_webpacker?
223
222
  webpacker_public_output_path = ReactOnRails::WebpackerUtils.webpacker_public_output_path
224
223
  Rails.logger.warn "Error configuring config/initializers/react_on_rails. Define neither the "\
225
- "generated_assets_dirs no the generated_assets_dir when using Webpacker. This is defined by "\
226
- "public_output_path specified in webpacker.yml = #{webpacker_public_output_path}."
224
+ "generated_assets_dirs no the generated_assets_dir when using Webpacker. This is defined by "\
225
+ "public_output_path specified in webpacker.yml = #{webpacker_public_output_path}."
227
226
  return
228
227
  end
229
228
 
230
229
  Rails.logger.warn "[DEPRECATION] ReactOnRails: Use config.generated_assets_dir rather than "\
231
- "generated_assets_dirs"
230
+ "generated_assets_dirs"
232
231
  if generated_assets_dir.blank?
233
232
  self.generated_assets_dir = generated_assets_dirs
234
233
  else
235
234
  Rails.logger.warn "[DEPRECATION] ReactOnRails. You have both generated_assets_dirs and "\
236
- "generated_assets_dir defined. Define ONLY generated_assets_dir if NOT using Webpacker"\
237
- " and define neither if using Webpacker"
235
+ "generated_assets_dir defined. Define ONLY generated_assets_dir if NOT using Webpacker"\
236
+ " and define neither if using Webpacker"
238
237
  end
239
238
  end
240
239
 
@@ -154,7 +154,7 @@ module ReactOnRails
154
154
  @registered_stores_defer_render ||= []
155
155
  @registered_stores_defer_render << redux_store_data
156
156
  "YOU SHOULD NOT SEE THIS ON YOUR VIEW -- Uses as a code block, like <% redux_store %> "\
157
- "and not <%= redux store %>"
157
+ "and not <%= redux store %>"
158
158
  else
159
159
  @registered_stores ||= []
160
160
  @registered_stores << redux_store_data
@@ -244,7 +244,7 @@ module ReactOnRails
244
244
 
245
245
  unless hash_or_string.is_a?(String) || hash_or_string.is_a?(Hash)
246
246
  raise ReactOnRails::Error, "#{__method__} only accepts String or Hash as argument "\
247
- "(#{hash_or_string.class} given)."
247
+ "(#{hash_or_string.class} given)."
248
248
  end
249
249
 
250
250
  json_value = hash_or_string.is_a?(String) ? hash_or_string : hash_or_string.to_json
@@ -413,7 +413,7 @@ module ReactOnRails
413
413
  # Setup the page_loaded_js, which is the same regardless of prerendering or not!
414
414
  # The reason is that React is smart about not doing extra work if the server rendering did its job.
415
415
  component_specification_tag = content_tag(:script,
416
- json_safe_and_pretty(render_options.props).html_safe,
416
+ json_safe_and_pretty(render_options.client_props).html_safe,
417
417
  type: "application/json",
418
418
  class: "js-react-on-rails-component",
419
419
  "data-component-name" => render_options.react_component_name,
@@ -85,9 +85,7 @@ module ReactOnRails
85
85
 
86
86
  def generate_file(template, path)
87
87
  result = ERB.new(template).result()
88
- File.open(path, "w") do |f|
89
- f.write(result)
90
- end
88
+ File.write(path, result)
91
89
  end
92
90
 
93
91
  def generate_translations
@@ -27,6 +27,20 @@ module ReactOnRails
27
27
  options.fetch(:props) { NO_PROPS }
28
28
  end
29
29
 
30
+ def client_props
31
+ props_extension = ReactOnRails.configuration.rendering_props_extension
32
+ if props_extension.present?
33
+ if props_extension.respond_to?(:adjust_props_for_client_side_hydration)
34
+ return props_extension.adjust_props_for_client_side_hydration(react_component_name,
35
+ props.clone)
36
+ end
37
+
38
+ raise ReactOnRails::Error, "ReactOnRails: your rendering_props_extension module is missing the "\
39
+ "required adjust_props_for_client_side_hydration method & can not be used"
40
+ end
41
+ props
42
+ end
43
+
30
44
  def random_dom_id
31
45
  retrieve_configuration_value_for(:random_dom_id)
32
46
  end
@@ -133,15 +133,15 @@ module ReactOnRails
133
133
  if ReactOnRails.configuration.trace
134
134
  Rails.logger.info do
135
135
  "[react_on_rails] Created JavaScript context with file "\
136
- "#{ReactOnRails::Utils.server_bundle_js_file_path}"
136
+ "#{ReactOnRails::Utils.server_bundle_js_file_path}"
137
137
  end
138
138
  end
139
139
  ExecJS.compile(base_js_code)
140
140
  rescue StandardError => e
141
141
  msg = "ERROR when compiling base_js_code! "\
142
- "See file #{file_name} to "\
143
- "correlate line numbers of error. Error is\n\n#{e.message}"\
144
- "\n\n#{e.backtrace.join("\n")}"
142
+ "See file #{file_name} to "\
143
+ "correlate line numbers of error. Error is\n\n#{e.message}"\
144
+ "\n\n#{e.backtrace.join("\n")}"
145
145
  Rails.logger.error(msg)
146
146
  trace_js_code_used("Error when compiling JavaScript code for the context.", base_js_code,
147
147
  file_name, force: true)
@@ -150,7 +150,9 @@ module ReactOnRails
150
150
  end
151
151
 
152
152
  def execjs_timer_polyfills
153
- if ReactOnRails::Utils.react_on_rails_pro? && ReactOnRailsPro.configuration.include_execjs_polyfills == false
153
+ if ReactOnRails::Utils.react_on_rails_pro? &&
154
+ ReactOnRailsPro.configuration.respond_to?(:include_execjs_polyfills) &&
155
+ ReactOnRailsPro.configuration.include_execjs_polyfills == false
154
156
  return ""
155
157
  end
156
158
 
@@ -184,7 +186,7 @@ module ReactOnRails
184
186
  def undefined_for_exec_js_logging(function_name)
185
187
  if ReactOnRails.configuration.trace
186
188
  "console.error('[React on Rails Rendering] #{function_name} is not defined for server rendering.');\n"\
187
- " console.error(getStackTrace().join('\\n'));"
189
+ " console.error(getStackTrace().join('\\n'));"
188
190
  else
189
191
  ""
190
192
  end
@@ -66,10 +66,10 @@ module ReactOnRails
66
66
  file_list = make_file_list(make_globs(generated_assets_full_path)).to_ary
67
67
  puts "V" * 80
68
68
  puts "Please define config.webpack_generated_files (array) so the test helper knows "\
69
- "which files are required. If you are using webpacker, you typically need to only "\
70
- "include 'manifest.json'."
69
+ "which files are required. If you are using webpacker, you typically need to only "\
70
+ "include 'manifest.json'."
71
71
  puts "Detected the possible following files to check for webpack compilation in "\
72
- "#{generated_assets_full_path}"
72
+ "#{generated_assets_full_path}"
73
73
  puts file_list.join("\n")
74
74
  puts "^" * 80
75
75
  file_list
@@ -72,8 +72,8 @@ module ReactOnRails
72
72
  unless @printed_once
73
73
  puts
74
74
  puts "====> React On Rails: Checking files in "\
75
- "#{webpack_assets_status_checker.generated_assets_full_path} for "\
76
- "outdated/missing bundles based on source_path #{source_path}"
75
+ "#{webpack_assets_status_checker.generated_assets_full_path} for "\
76
+ "outdated/missing bundles based on source_path #{source_path}"
77
77
  puts
78
78
  @printed_once = true
79
79
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReactOnRails
4
- VERSION = "12.5.0"
4
+ VERSION = "13.0.0.beta.0"
5
5
  end
@@ -7,13 +7,8 @@ module ReactOnRails
7
7
  def self.using_webpacker?
8
8
  return @using_webpacker if defined?(@using_webpacker)
9
9
 
10
- @using_webpacker = ReactOnRails::Utils.gem_available?("webpacker")
11
- end
12
-
13
- def self.webpacker_webpack_production_config_exists?
14
- webpacker_webpack_config_abs_path = File.join(Rails.root,
15
- "config/webpack/production.js")
16
- File.exist?(webpacker_webpack_config_abs_path)
10
+ @using_webpacker = ReactOnRails::Utils.gem_available?("webpacker") ||
11
+ ReactOnRails::Utils.gem_available?("shakapacker")
17
12
  end
18
13
 
19
14
  def self.dev_server_running?
@@ -1,46 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Important: The default assets:precompile is modified ONLY if the rails/webpacker webpack config
4
- # does not exist!
5
-
6
- require "active_support"
7
-
8
- ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
9
-
10
- skip_react_on_rails_precompile = %w[no false n f].include?(ENV["REACT_ON_RAILS_PRECOMPILE"])
11
-
12
- if !skip_react_on_rails_precompile && ReactOnRails.configuration.build_production_command.present?
13
- # Ensure that rails/webpacker does not call bin/webpack if we're providing
14
- # the build command.
15
- ENV["WEBPACKER_PRECOMPILE"] = "false"
16
-
17
- precompile_tasks = lambda {
18
- Rake::Task["react_on_rails:assets:webpack"].invoke
19
- puts "Invoking task webpacker:clean from React on Rails"
20
-
21
- # VERSIONS is per the rails/webpacker clean method definition.
22
- # We set it very big so that it is not used, and then clean just
23
- # removes files older than 1 hour.
24
- versions = 100_000
25
- Rake::Task["webpacker:clean"].invoke(versions)
26
- }
27
-
28
- if Rake::Task.task_defined?("assets:precompile")
29
- Rake::Task["assets:precompile"].enhance do
30
- precompile_tasks.call
31
- end
32
- else
33
- Rake::Task.define_task("assets:precompile") do
34
- precompile_tasks.call
35
- end
36
- end
37
- end
38
-
39
- # Sprockets independent tasks
40
3
  # rubocop:disable Metrics/BlockLength
41
4
  namespace :react_on_rails do
42
5
  namespace :assets do
43
- desc <<~DESC.strip_heredoc
6
+ desc <<~DESC
44
7
  If config.build_production_command is defined, this command is automatically
45
8
  added to task assets:precompile and the regular webpacker compile will not run.
46
9
  The defined command is either a script or a module with a method `call`.
@@ -65,10 +28,6 @@ namespace :react_on_rails do
65
28
  msg = <<~MSG
66
29
  React on Rails is aborting webpack compilation from task react_on_rails:assets:webpack
67
30
  because you do not have the `config.build_production_command` defined.
68
-
69
- Note, this task may have run as part of `assets:precompile`. If file
70
- config/webpack/production.js does not exist, React on Rails will modify
71
- the default `asset:precompile` to run task `react_on_rails:assets:webpack`.
72
31
  MSG
73
32
  puts Rainbow(msg).red
74
33
  exit!(1)
@@ -3,10 +3,9 @@
3
3
  require "react_on_rails/locales/base"
4
4
  require "react_on_rails/locales/to_js"
5
5
  require "react_on_rails/locales/to_json"
6
- require "active_support"
7
6
 
8
7
  namespace :react_on_rails do
9
- desc <<-DESC.strip_heredoc
8
+ desc <<~DESC
10
9
  Generate i18n javascript files
11
10
  This task generates javascript locale files: `translations.js` & `default.js` and places them in
12
11
  the "ReactOnRails.configuration.i18n_dir".
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "12.5.0",
3
+ "version": "13.0.0-beta.0",
4
4
  "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
5
  "main": "node_package/lib/ReactOnRails.js",
6
6
  "directories": {
@@ -45,7 +45,10 @@ module ReactOnRails
45
45
  # Gems we need to add to the Gemfile before bundle installing
46
46
  def required_gems
47
47
  relative_gem_root = Pathname(gem_root).relative_path_from(Pathname(dir))
48
- ["gem 'react_on_rails', path: '#{relative_gem_root}'"]
48
+ [
49
+ "gem 'react_on_rails', path: '#{relative_gem_root}'",
50
+ "gem 'shakapacker'"
51
+ ]
49
52
  end
50
53
 
51
54
  # Options we pass when running `rails new` from the command-line.
@@ -78,7 +81,7 @@ module ReactOnRails
78
81
  # Assumes we are inside a rails app's folder and necessary gems have been installed
79
82
  def generator_shell_commands
80
83
  shell_commands = []
81
- shell_commands << "rails generate react_on_rails:install #{generator_options} --ignore-warnings"
84
+ shell_commands << "rails generate react_on_rails:install #{generator_options} --ignore-warnings --force"
82
85
  shell_commands << "rails generate react_on_rails:dev_tests #{generator_options}"
83
86
  end
84
87
 
@@ -16,7 +16,7 @@ namespace :examples do # rubocop:disable Metrics/BlockLength
16
16
  # Loads data from examples_config.yml and instantiates corresponding ExampleType objects
17
17
  examples_config_file = File.expand_path("examples_config.yml", __dir__)
18
18
  examples_config = symbolize_keys(YAML.safe_load(File.read(examples_config_file)))
19
- examples_config[:example_type_data].each { |example_type_data| ExampleType.new(symbolize_keys(example_type_data)) }
19
+ examples_config[:example_type_data].each { |example_type_data| ExampleType.new(**symbolize_keys(example_type_data)) }
20
20
 
21
21
  # Define tasks for each example type
22
22
  ExampleType.all.each do |example_type|
@@ -30,19 +30,12 @@ namespace :examples do # rubocop:disable Metrics/BlockLength
30
30
  desc "Generates #{example_type.name_pretty}"
31
31
  task example_type.gen_task_name_short => example_type.clobber_task_name do
32
32
  mkdir_p(example_type.dir)
33
- if Rails::VERSION::MAJOR < 6
34
- example_type.rails_options += " --webpack"
35
- elsif Rails::VERSION::MAJOR >= 7
36
- example_type.rails_options += "--javascript=webpack"
37
- end
33
+ example_type.rails_options += "--skip-javascript"
38
34
  sh_in_dir(examples_dir, "rails new #{example_type.name} #{example_type.rails_options}")
39
35
  sh_in_dir(example_type.dir, "touch .gitignore")
40
- copy_generator_webpacker_yml_to(example_type.dir)
41
- sh_in_dir(example_type.dir, "bundle add webpacker --version 6.0.0.rc.6")
42
- sh_in_dir(example_type.dir, "rake webpacker:install")
43
- sh_in_dir(example_type.dir, "bundle binstubs --path=#{example_type.dir}/bin webpacker")
44
36
  append_to_gemfile(example_type.gemfile, example_type.required_gems)
45
37
  bundle_install_in(example_type.dir)
38
+ sh_in_dir(example_type.dir, "rake webpacker:install")
46
39
  sh_in_dir(example_type.dir, example_type.generator_shell_commands)
47
40
  sh_in_dir(example_type.dir, "yarn")
48
41
  end
data/rakelib/release.rake CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bundler"
3
4
  require_relative "task_helpers"
4
5
  require_relative File.join(gem_root, "lib", "react_on_rails", "version_syntax_converter")
5
6
  require_relative File.join(gem_root, "lib", "react_on_rails", "git_utils")
@@ -27,6 +28,8 @@ which are installed via `bundle install` and `yarn global add release-it`
27
28
  automatically perform a patch version bump.
28
29
  2nd argument: Perform a dry run by passing 'true' as a second argument.
29
30
 
31
+ Note, accept defaults for npmjs options. Script will pause to get 2FA tokens.
32
+
30
33
  Example: `rake release[2.1.0,false]`")
31
34
  task :release, %i[gem_version dry_run tools_install] do |_t, args|
32
35
  include ReactOnRails::TaskHelpers
@@ -57,6 +60,7 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args|
57
60
  # Update dummy app's Gemfile.lock
58
61
  bundle_install_in(dummy_app_dir)
59
62
 
63
+ puts "Carefully add your OTP for NPM. If you get an error, 'git reset --hard' and start over."
60
64
  # Will bump the yarn version, commit, tag the commit, push to repo, and release on yarn
61
65
  release_it_command = +"release-it"
62
66
  release_it_command << " #{npm_version}" unless npm_version.strip.empty?
@@ -65,6 +69,8 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args|
65
69
  sh_in_dir(gem_root, release_it_command)
66
70
 
67
71
  # Release the new gem version
72
+
73
+ puts "Carefully add your OTP for Rubygems. If you get an error, run 'gem release' again."
68
74
  sh_in_dir(gem_root, "gem release") unless is_dry_run
69
75
 
70
76
  msg = <<~MSG
@@ -12,13 +12,6 @@ module ReactOnRails
12
12
  File.join(gem_root, "gen-examples", "examples")
13
13
  end
14
14
 
15
- # This method is used to prevent an error that when installing webpacker 6.0.0.rc.6
16
- # without a previous config/webpacker.yml will throw and error
17
- def copy_generator_webpacker_yml_to(destination)
18
- webpacker_file = File.join(gem_root, "lib/generators/react_on_rails/templates/base/base/config/webpacker.yml")
19
- sh %( cp #{webpacker_file} #{destination}/config/webpacker.yml )
20
- end
21
-
22
15
  def dummy_app_dir
23
16
  File.join(gem_root, "spec/dummy")
24
17
  end
@@ -28,9 +28,8 @@ Gem::Specification.new do |s|
28
28
  s.add_dependency "addressable"
29
29
  s.add_dependency "connection_pool"
30
30
  s.add_dependency "execjs", "~> 2.5"
31
- s.add_dependency "rails", ">= 3.2"
31
+ s.add_dependency "rails", ">= 5.2"
32
32
  s.add_dependency "rainbow", "~> 3.0"
33
- s.add_dependency "webpacker", ">= 4.0"
34
33
 
35
34
  s.add_development_dependency "bundler", "~> 2"
36
35
  s.add_development_dependency "gem-release"