react_on_rails 13.3.0 → 13.4.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +5 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +19 -0
- data/.github/workflows/lint-js-and-ruby.yml +2 -1
- data/.github/workflows/main.yml +17 -18
- data/.github/workflows/rspec-package-specs.yml +1 -0
- data/.prettierignore +3 -1
- data/CHANGELOG.md +106 -56
- data/Gemfile.development_dependencies +2 -2
- data/README.md +9 -1
- data/docs/additional-details/recommended-project-structure.md +6 -6
- data/docs/additional-details/tips-for-usage-with-sp6.md +15 -0
- data/docs/deployment/heroku-deployment.md +15 -11
- data/docs/getting-started.md +28 -27
- data/docs/guides/configuration.md +29 -19
- data/docs/guides/deployment.md +3 -2
- data/docs/guides/file-system-based-automated-bundle-generation.md +57 -51
- data/docs/guides/hmr-and-hot-reloading-with-the-webpack-dev-server.md +10 -10
- data/docs/guides/how-react-on-rails-works.md +6 -6
- data/docs/guides/how-to-conditionally-server-render-based-on-device-type.md +2 -1
- data/docs/guides/installation-into-an-existing-rails-app.md +10 -8
- data/docs/guides/rails-webpacker-react-integration-options.md +34 -4
- data/docs/guides/react-on-rails-overview.md +6 -7
- data/docs/guides/rspec-configuration.md +11 -11
- data/docs/guides/tutorial.md +89 -83
- data/docs/guides/upgrading-react-on-rails.md +2 -2
- data/docs/guides/webpack-configuration.md +14 -14
- data/docs/home.md +3 -3
- data/docs/javascript/asset-pipeline.md +4 -4
- data/docs/javascript/converting-from-custom-webpack-config-to-rails-webpacker-config.md +8 -8
- data/docs/javascript/server-rendering-tips.md +1 -1
- data/docs/javascript/troubleshooting-when-using-shakapacker.md +77 -0
- data/docs/outdated/rails-assets-relative-paths.md +1 -1
- data/docs/outdated/rails-assets.md +1 -1
- data/docs/react-on-rails-pro/react-on-rails-pro.md +1 -1
- data/lib/generators/react_on_rails/adapt_for_older_shakapacker_generator.rb +41 -0
- data/lib/generators/react_on_rails/base_generator.rb +3 -47
- data/lib/generators/react_on_rails/bin/dev +2 -5
- data/lib/generators/react_on_rails/bin/dev-static +2 -5
- data/lib/generators/react_on_rails/generator_messages.rb +40 -0
- data/lib/generators/react_on_rails/install_generator.rb +30 -0
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +2 -2
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-static +2 -2
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +2 -2
- data/lib/generators/react_on_rails/templates/base/base/config/{webpacker.yml → shakapacker.yml} +3 -3
- data/lib/generators/react_on_rails/templates/base/base/config/webpack/commonWebpackConfig.js.tt +3 -1
- data/lib/react_on_rails/configuration.rb +16 -16
- data/lib/react_on_rails/helper.rb +26 -27
- data/lib/react_on_rails/packs_generator.rb +12 -5
- data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +1 -3
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +1 -1
- data/lib/react_on_rails/test_helper.rb +10 -1
- data/lib/react_on_rails/utils.rb +0 -4
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/webpacker_utils.rb +8 -3
- data/package.json +1 -1
- data/rakelib/dummy_apps.rake +6 -1
- data/rakelib/run_rspec.rake +1 -15
- metadata +7 -3
|
@@ -313,27 +313,25 @@ module ReactOnRails
|
|
|
313
313
|
@rails_context.merge(serverSide: server_side)
|
|
314
314
|
end
|
|
315
315
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
private
|
|
316
|
+
def load_pack_for_generated_component(react_component_name, render_options)
|
|
317
|
+
return unless render_options.auto_load_bundle
|
|
319
318
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
if is_development && !is_component_pack_present
|
|
325
|
-
ReactOnRails::PacksGenerator.instance.generate_packs_if_stale
|
|
326
|
-
raise_missing_pack_error(component_name)
|
|
319
|
+
ReactOnRails::WebpackerUtils.raise_nested_entries_disabled unless ReactOnRails::WebpackerUtils.nested_entries?
|
|
320
|
+
if Rails.env.development?
|
|
321
|
+
is_component_pack_present = File.exist?(generated_components_pack_path(react_component_name))
|
|
322
|
+
raise_missing_autoloaded_bundle(react_component_name) unless is_component_pack_present
|
|
327
323
|
end
|
|
324
|
+
append_javascript_pack_tag("generated/#{react_component_name}",
|
|
325
|
+
defer: ReactOnRails.configuration.defer_generated_component_packs)
|
|
326
|
+
append_stylesheet_pack_tag("generated/#{react_component_name}")
|
|
327
|
+
end
|
|
328
328
|
|
|
329
|
-
|
|
329
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
330
330
|
|
|
331
|
-
|
|
332
|
-
ApplicationController.helpers.append_stylesheet_pack_tag "generated/#{component_name}"
|
|
333
|
-
end
|
|
331
|
+
private
|
|
334
332
|
|
|
335
|
-
def generated_components_pack_path(
|
|
336
|
-
"#{ReactOnRails::WebpackerUtils.webpacker_source_entry_path}/generated/#{
|
|
333
|
+
def generated_components_pack_path(react_component_name)
|
|
334
|
+
"#{ReactOnRails::WebpackerUtils.webpacker_source_entry_path}/generated/#{react_component_name}.js"
|
|
337
335
|
end
|
|
338
336
|
|
|
339
337
|
def build_react_component_result_for_server_rendered_string(
|
|
@@ -446,7 +444,7 @@ module ReactOnRails
|
|
|
446
444
|
# Create the HTML rendering part
|
|
447
445
|
result = server_rendered_react_component(render_options)
|
|
448
446
|
|
|
449
|
-
|
|
447
|
+
load_pack_for_generated_component(react_component_name, render_options)
|
|
450
448
|
|
|
451
449
|
{
|
|
452
450
|
render_options: render_options,
|
|
@@ -551,16 +549,6 @@ module ReactOnRails
|
|
|
551
549
|
result
|
|
552
550
|
end
|
|
553
551
|
|
|
554
|
-
def raise_missing_pack_error(component_name)
|
|
555
|
-
msg = <<~MSG
|
|
556
|
-
**ERROR** ReactOnRails: Generated missing pack for Component: #{component_name}. Please restart the webpack dev server or webpack in watch mode, to ensure webpack generates the chunks corresponding to #{component_name} component. If the problem persists
|
|
557
|
-
1. Verify `components_subdirectory` is configured in `config/initializers/react_on_rails`.
|
|
558
|
-
2. Component: #{component_name} is placed inside the configured `components_subdirectory`.
|
|
559
|
-
MSG
|
|
560
|
-
|
|
561
|
-
raise ReactOnRails::Error, msg
|
|
562
|
-
end
|
|
563
|
-
|
|
564
552
|
def replay_console_option(val)
|
|
565
553
|
val.nil? ? ReactOnRails.configuration.replay_console : val
|
|
566
554
|
end
|
|
@@ -577,6 +565,17 @@ module ReactOnRails
|
|
|
577
565
|
instrument_method :react_component, type: "ReactOnRails", name: "react_component"
|
|
578
566
|
instrument_method :react_component_hash, type: "ReactOnRails", name: "react_component_hash"
|
|
579
567
|
end
|
|
568
|
+
|
|
569
|
+
def raise_missing_autoloaded_bundle(react_component_name)
|
|
570
|
+
msg = <<~MSG
|
|
571
|
+
**ERROR** ReactOnRails: Component "#{react_component_name}" is configured as "auto_load_bundle: true"
|
|
572
|
+
but the generated component entrypoint, which should have been at #{generated_components_pack_path(react_component_name)},
|
|
573
|
+
is missing. You might want to check that this component is in a directory named "#{ReactOnRails.configuration.components_subdirectory}"
|
|
574
|
+
& that "bundle exec rake react_on_rails:generate_packs" has been run.
|
|
575
|
+
MSG
|
|
576
|
+
|
|
577
|
+
raise ReactOnRails::Error, msg
|
|
578
|
+
end
|
|
580
579
|
end
|
|
581
580
|
end
|
|
582
581
|
# rubocop:enable Metrics/ModuleLength
|
|
@@ -13,6 +13,8 @@ module ReactOnRails
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def generate_packs_if_stale
|
|
16
|
+
return unless ReactOnRails.configuration.auto_load_bundle
|
|
17
|
+
|
|
16
18
|
are_generated_files_present_and_up_to_date = Dir.exist?(generated_packs_directory_path) &&
|
|
17
19
|
File.exist?(generated_server_bundle_file_path) &&
|
|
18
20
|
!stale_or_missing_packs?
|
|
@@ -78,6 +80,8 @@ module ReactOnRails
|
|
|
78
80
|
end
|
|
79
81
|
|
|
80
82
|
def add_generated_pack_to_server_bundle
|
|
83
|
+
return if ReactOnRails.configuration.make_generated_server_bundle_the_entrypoint
|
|
84
|
+
|
|
81
85
|
relative_path_to_generated_server_bundle = relative_path(server_bundle_entrypoint,
|
|
82
86
|
generated_server_bundle_file_path)
|
|
83
87
|
content = <<~FILE_CONTENT
|
|
@@ -93,11 +97,15 @@ module ReactOnRails
|
|
|
93
97
|
end
|
|
94
98
|
|
|
95
99
|
def generated_server_bundle_file_path
|
|
100
|
+
return server_bundle_entrypoint if ReactOnRails.configuration.make_generated_server_bundle_the_entrypoint
|
|
101
|
+
|
|
96
102
|
generated_server_bundle_file_path = server_bundle_entrypoint.sub(".js", "-generated.js")
|
|
97
103
|
generated_server_bundle_file_name = component_name(generated_server_bundle_file_path)
|
|
98
|
-
|
|
104
|
+
source_entrypoint_parent = Pathname(ReactOnRails::WebpackerUtils.webpacker_source_entry_path).parent
|
|
105
|
+
generated_nonentrypoints_path = "#{source_entrypoint_parent}/generated"
|
|
99
106
|
|
|
100
|
-
|
|
107
|
+
FileUtils.mkdir_p(generated_nonentrypoints_path)
|
|
108
|
+
"#{generated_nonentrypoints_path}/#{generated_server_bundle_file_name}.js"
|
|
101
109
|
end
|
|
102
110
|
|
|
103
111
|
def clean_generated_packs_directory
|
|
@@ -214,12 +222,11 @@ module ReactOnRails
|
|
|
214
222
|
|
|
215
223
|
def stale_or_missing_packs?
|
|
216
224
|
component_files = common_component_to_path.values + client_component_to_path.values
|
|
217
|
-
most_recent_mtime = Utils.find_most_recent_mtime(component_files)
|
|
225
|
+
most_recent_mtime = Utils.find_most_recent_mtime(component_files).to_i
|
|
218
226
|
|
|
219
227
|
component_files.each_with_object([]).any? do |file|
|
|
220
228
|
path = generated_pack_path(file)
|
|
221
|
-
|
|
222
|
-
!File.exist?(path) || File.mtime(path) < most_recent_mtime
|
|
229
|
+
!File.exist?(path) || File.mtime(path).to_i < most_recent_mtime
|
|
223
230
|
end
|
|
224
231
|
end
|
|
225
232
|
end
|
|
@@ -113,9 +113,7 @@ module ReactOnRails
|
|
|
113
113
|
|
|
114
114
|
def eval_js(js_code, _render_options)
|
|
115
115
|
@js_context_pool.with do |js_context|
|
|
116
|
-
|
|
117
|
-
js_context.eval("console.history = []")
|
|
118
|
-
result
|
|
116
|
+
js_context.eval(js_code)
|
|
119
117
|
end
|
|
120
118
|
end
|
|
121
119
|
|
|
@@ -37,7 +37,7 @@ module ReactOnRails
|
|
|
37
37
|
# All done if no stale files!
|
|
38
38
|
return if stale_gen_files.empty?
|
|
39
39
|
|
|
40
|
-
ReactOnRails::PacksGenerator.instance.generate_packs_if_stale
|
|
40
|
+
ReactOnRails::PacksGenerator.instance.generate_packs_if_stale if ReactOnRails.configuration.auto_load_bundle
|
|
41
41
|
|
|
42
42
|
# Inform the developer that we're ensuring gen assets are ready.
|
|
43
43
|
puts_start_compile_check_message(stale_gen_files)
|
|
@@ -35,8 +35,17 @@ module ReactOnRails
|
|
|
35
35
|
def self.configure_rspec_to_compile_assets(config, *metatags)
|
|
36
36
|
metatags = %i[js server_rendering controller] if metatags.empty?
|
|
37
37
|
|
|
38
|
+
# Supported since RSpec 3.5.0
|
|
39
|
+
supports_first_matching_example = config.respond_to?(:when_first_matching_example_defined)
|
|
40
|
+
|
|
38
41
|
metatags.each do |metatag|
|
|
39
|
-
|
|
42
|
+
if supports_first_matching_example
|
|
43
|
+
config.when_first_matching_example_defined(metatag) do
|
|
44
|
+
ReactOnRails::TestHelper.ensure_assets_compiled
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
config.before(:example, metatag) { ReactOnRails::TestHelper.ensure_assets_compiled }
|
|
48
|
+
end
|
|
40
49
|
end
|
|
41
50
|
end
|
|
42
51
|
|
data/lib/react_on_rails/utils.rb
CHANGED
|
@@ -27,9 +27,10 @@ module ReactOnRails
|
|
|
27
27
|
@shakapacker_version_as_array = [match[1].to_i, match[2].to_i, match[3].to_i]
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def self.shackapacker_version_requirement_met?(
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
def self.shackapacker_version_requirement_met?(required_version)
|
|
31
|
+
req_ver = semver_to_string(required_version)
|
|
32
|
+
|
|
33
|
+
Gem::Version.new(shakapacker_version) >= Gem::Version.new(req_ver)
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
# This returns either a URL for the webpack-dev-server, non-server bundle or
|
|
@@ -136,5 +137,9 @@ module ReactOnRails
|
|
|
136
137
|
|
|
137
138
|
raise ReactOnRails::Error, msg
|
|
138
139
|
end
|
|
140
|
+
|
|
141
|
+
def self.semver_to_string(ary)
|
|
142
|
+
"#{ary[0]}.#{ary[1]}.#{ary[2]}"
|
|
143
|
+
end
|
|
139
144
|
end
|
|
140
145
|
end
|
data/package.json
CHANGED
data/rakelib/dummy_apps.rake
CHANGED
|
@@ -16,7 +16,12 @@ namespace :dummy_apps do
|
|
|
16
16
|
bundle_install_in(dummy_app_dir)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
task
|
|
19
|
+
task :generate_packs do
|
|
20
|
+
dummy_app_dir = File.join(gem_root, "spec/dummy")
|
|
21
|
+
sh_in_dir(dummy_app_dir, "bundle exec rake react_on_rails:generate_packs")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
task dummy_apps: %i[dummy_app node_package generate_packs] do
|
|
20
25
|
puts "Prepared all Dummy Apps"
|
|
21
26
|
end
|
|
22
27
|
end
|
data/rakelib/run_rspec.rake
CHANGED
|
@@ -20,15 +20,11 @@ namespace :run_rspec do
|
|
|
20
20
|
|
|
21
21
|
desc "Runs dummy rspec with turbolinks"
|
|
22
22
|
task dummy: ["dummy_apps:dummy_app"] do
|
|
23
|
-
clean_gen_assets(spec_dummy_dir)
|
|
24
|
-
bundle_install_in(dummy_app_dir)
|
|
25
23
|
run_tests_in(spec_dummy_dir)
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
desc "Runs dummy rspec without turbolinks"
|
|
29
27
|
task dummy_no_turbolinks: ["dummy_apps:dummy_app"] do
|
|
30
|
-
clean_gen_assets(spec_dummy_dir)
|
|
31
|
-
bundle_install_in(dummy_app_dir)
|
|
32
28
|
run_tests_in(spec_dummy_dir,
|
|
33
29
|
env_vars: "DISABLE_TURBOLINKS=TRUE",
|
|
34
30
|
command_name: "dummy_no_turbolinks")
|
|
@@ -47,15 +43,10 @@ namespace :run_rspec do
|
|
|
47
43
|
ExampleType.all.each { |example_type| Rake::Task[example_type.rspec_task_name].invoke }
|
|
48
44
|
end
|
|
49
45
|
|
|
50
|
-
desc "(HACK) Run RSpec on spec/empty_spec in order to have SimpleCov generate a coverage report from cache"
|
|
51
|
-
task :empty do
|
|
52
|
-
sh %(#{ENV['USE_COVERALLS'] ? 'COVERAGE=true' : ''} rspec spec/empty_spec.rb)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
46
|
Coveralls::RakeTask.new if ENV["USE_COVERALLS"] == "TRUE"
|
|
56
47
|
|
|
57
48
|
desc "run all tests no examples"
|
|
58
|
-
task all_but_examples: %i[gem dummy_no_turbolinks dummy
|
|
49
|
+
task all_but_examples: %i[gem dummy_no_turbolinks dummy js_tests] do
|
|
59
50
|
puts "Completed all RSpec tests"
|
|
60
51
|
end
|
|
61
52
|
|
|
@@ -110,8 +101,3 @@ def run_tests_in(dir, options = {})
|
|
|
110
101
|
env_vars << "COVERAGE=true" if ENV["USE_COVERALLS"]
|
|
111
102
|
sh_in_dir(path.realpath, "#{env_vars} bundle exec rspec #{rspec_args}")
|
|
112
103
|
end
|
|
113
|
-
|
|
114
|
-
def clean_gen_assets(dir)
|
|
115
|
-
path = calc_path(dir)
|
|
116
|
-
sh_in_dir(path.realpath, "yarn run build:clean")
|
|
117
|
-
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: react_on_rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 13.
|
|
4
|
+
version: 13.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Gordon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-07-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -124,6 +124,7 @@ files:
|
|
|
124
124
|
- ".github/FUNDING.yml"
|
|
125
125
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
|
126
126
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
|
127
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
|
127
128
|
- ".github/workflows/lint-js-and-ruby.yml"
|
|
128
129
|
- ".github/workflows/main.yml"
|
|
129
130
|
- ".github/workflows/package-js-tests.yml"
|
|
@@ -156,6 +157,7 @@ files:
|
|
|
156
157
|
- docs/additional-details/manual-installation-overview.md
|
|
157
158
|
- docs/additional-details/migrating-from-react-rails.md
|
|
158
159
|
- docs/additional-details/recommended-project-structure.md
|
|
160
|
+
- docs/additional-details/tips-for-usage-with-sp6.md
|
|
159
161
|
- docs/additional-details/updating-dependencies.md
|
|
160
162
|
- docs/additional-details/upgrade-webpacker-v3-to-v4.md
|
|
161
163
|
- docs/api/javascript-api.md
|
|
@@ -202,6 +204,7 @@ files:
|
|
|
202
204
|
- docs/javascript/react-helmet.md
|
|
203
205
|
- docs/javascript/react-router.md
|
|
204
206
|
- docs/javascript/server-rendering-tips.md
|
|
207
|
+
- docs/javascript/troubleshooting-when-using-shakapacker.md
|
|
205
208
|
- docs/javascript/troubleshooting-when-using-webpacker.md
|
|
206
209
|
- docs/javascript/webpack-v1-notes.md
|
|
207
210
|
- docs/javascript/webpack.md
|
|
@@ -224,6 +227,7 @@ files:
|
|
|
224
227
|
- docs/testimonials/testimonials.md
|
|
225
228
|
- jest.config.js
|
|
226
229
|
- lib/generators/USAGE
|
|
230
|
+
- lib/generators/react_on_rails/adapt_for_older_shakapacker_generator.rb
|
|
227
231
|
- lib/generators/react_on_rails/base_generator.rb
|
|
228
232
|
- lib/generators/react_on_rails/bin/dev
|
|
229
233
|
- lib/generators/react_on_rails/bin/dev-static
|
|
@@ -246,6 +250,7 @@ files:
|
|
|
246
250
|
- lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb
|
|
247
251
|
- lib/generators/react_on_rails/templates/base/base/babel.config.js.tt
|
|
248
252
|
- lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb
|
|
253
|
+
- lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml
|
|
249
254
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/clientWebpackConfig.js.tt
|
|
250
255
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/commonWebpackConfig.js.tt
|
|
251
256
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt
|
|
@@ -254,7 +259,6 @@ files:
|
|
|
254
259
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/test.js.tt
|
|
255
260
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/webpack.config.js.tt
|
|
256
261
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/webpackConfig.js.tt
|
|
257
|
-
- lib/generators/react_on_rails/templates/base/base/config/webpacker.yml
|
|
258
262
|
- lib/generators/react_on_rails/templates/dev_tests/.eslintrc
|
|
259
263
|
- lib/generators/react_on_rails/templates/dev_tests/.rspec
|
|
260
264
|
- lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb
|