react_on_rails 13.3.3 → 13.3.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68dc51cc2eb837fd5ff976cdba5aeaefdec1ca13540e574e8f4e2ec054ec8769
4
- data.tar.gz: 80d926e7a845cb55f27763de6050b3b4d3f829323b46362ca6f3e92a1daac3aa
3
+ metadata.gz: 4483ea8d99927209e3115c17b967b22a187637111724b7928d3c7a4ff8672981
4
+ data.tar.gz: 121595ddc9e1d581ff289e4796bdd660b2107e504a30a1fdc5594daa7f2f411c
5
5
  SHA512:
6
- metadata.gz: ea748cde016bbdae69f2ffa4047324fdd9d2426413e1baf4e5adf9043e6540f4fbcf0d4ec2237ec4854d79eab257b9022afc91576bb9517cf5e2ae2490f06777
7
- data.tar.gz: a5c39c15e12231ad30bb15ef56517092cc50d368cd477d4653a4fad57b4f91c4b33143058718f09129623afd46ef81639b3f8add303b1125e4926641cc0b5c54
6
+ metadata.gz: 9c584cc7cad86fbac89377fd062dbe69686b51cdd078659cce234b77ae549d1c8071770458ebb5c0be6b5922716c6083ef2cbb731e96241d259de2f21e2d6ed4
7
+ data.tar.gz: a2eac20d40c6e06ccb191ea210d5bf1c024486611e05fed2f4b1260f4d04ea8b740b455770a6dfbf24d5497d3b723674e43e8e3ce366e08dc193c7e4d2587dfa
data/.circleci/config.yml CHANGED
@@ -1,3 +1,4 @@
1
+ # CircleCI is not longer in use by this repository & this file is now for reference only.
1
2
  version: 2
2
3
 
3
4
  aliases:
@@ -53,7 +54,7 @@ aliases:
53
54
  - &install-dummy-app-ruby-gems
54
55
  name: Install Ruby Gems for dummy app
55
56
  command: |
56
- gem install bundler
57
+ gem install bundler:2.4.9
57
58
  echo "Bundler version: "; bundle --version
58
59
  cd spec/dummy && bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
59
60
 
@@ -61,7 +62,7 @@ aliases:
61
62
  - &install-package-ruby-gems
62
63
  name: Install Ruby Gems for package
63
64
  command: |
64
- gem install bundler
65
+ gem install bundler:2.4.9
65
66
  echo "Bundler version: "; bundle --version
66
67
  bundle lock --add-platform 'x86_64-linux'
67
68
  bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
@@ -272,12 +273,12 @@ jobs:
272
273
  name: Prep for CI
273
274
  # TODO -- need to leverage Circle CI containers
274
275
  command: |
275
- bundle exec rails prepare_for_ci
276
+ bundle exec rake prepare_for_ci
276
277
  - run:
277
278
  name: Main CI
278
279
  # TODO -- need to leverage Circle CI containers
279
280
  command: |
280
- bundle exec rails run_rspec:all_dummy
281
+ bundle exec rake run_rspec:all_dummy
281
282
  # The following step will run only if the main job is finished successfully.
282
283
  # Build hook is triggered by curl command described here https://docs.netlify.com/configure-builds/build-hooks/
283
284
  # NETLIFY_HOOK is an environment variable on CircleCI to keep sensitive data outside the repo
@@ -15,6 +15,7 @@ jobs:
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
17
17
  ruby-version: ${{ matrix.ruby }}
18
+ bundler: 2.4.9
18
19
  - name: Setup Node
19
20
  uses: actions/setup-node@v2-beta
20
21
  with:
@@ -44,7 +45,7 @@ jobs:
44
45
  yarn run eslint -v
45
46
  sudo yarn global add yalc
46
47
  - name: Install Ruby Gems for package
47
- run: bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
48
+ run: bundle check --path=vendor/bundle || bundle _2.4.9_ install --path=vendor/bundle --jobs=4 --retry=3
48
49
  - name: Linting of Ruby
49
50
  run: bundle exec rubocop
50
51
  - name: Linting of JS
@@ -1,6 +1,6 @@
1
1
  name: Main test
2
2
 
3
- on: [push, pull_request]
3
+ on: [push]
4
4
 
5
5
  jobs:
6
6
  build-dummy-app-webpack-test-bundles:
@@ -15,6 +15,7 @@ jobs:
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
17
17
  ruby-version: ${{ matrix.ruby }}
18
+ bundler: 2.4.9
18
19
  # libyaml-dev is needed for psych v5
19
20
  # this gem depends on sdoc which depends on rdoc which depends on psych
20
21
  - name: Fix dependency for libyaml-dev
@@ -33,7 +34,7 @@ jobs:
33
34
  echo "Yarn version: "; yarn --version
34
35
  echo "Bundler version: "; bundle --version
35
36
  - name: Save root node_modules to cache
36
- uses: actions/cache@v2
37
+ uses: actions/cache@v3
37
38
  with:
38
39
  path: node_modules
39
40
  key: v5-package-node-modules-cache-${{ hashFiles('yarn.lock') }}
@@ -45,7 +46,7 @@ jobs:
45
46
  - name: yalc publish for react-on-rails
46
47
  run: yalc publish
47
48
  - name: Save spec/dummy/node_modules to cache
48
- uses: actions/cache@v2
49
+ uses: actions/cache@v3
49
50
  with:
50
51
  path: spec/dummy/node_modules
51
52
  key: v5-dummy-app-node-modules-cache-${{ hashFiles('spec/dummy/yarn.lock') }}
@@ -54,12 +55,12 @@ jobs:
54
55
  - name: Install Node modules with Yarn for dummy app
55
56
  run: cd spec/dummy && yarn install --no-progress --no-emoji
56
57
  - name: Save dummy app ruby gems to cache
57
- uses: actions/cache@v2
58
+ uses: actions/cache@v3
58
59
  with:
59
60
  path: spec/dummy/vendor/bundle
60
61
  key: v5-dummy-app-gem-cache-${{ hashFiles('spec/dummy/Gemfile.lock') }}
61
62
  - name: Install Ruby Gems for dummy app
62
- run: cd spec/dummy && bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
63
+ run: cd spec/dummy && bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle _2.4.9_ install --path=vendor/bundle --jobs=4 --retry=3
63
64
  - name: generate file system-based packs
64
65
  run: cd spec/dummy && RAILS_ENV=test bundle exec rake react_on_rails:generate_packs
65
66
  - name: Build test bundles for dummy app
@@ -67,7 +68,7 @@ jobs:
67
68
  - id: get-sha
68
69
  run: echo "::set-output name=sha::$(git rev-parse HEAD)"
69
70
  - name: Save test webpack bundles to cache (for build number checksum used by rspec job)
70
- uses: actions/cache@v2
71
+ uses: actions/cache/save@v3
71
72
  with:
72
73
  path: spec/dummy/public/webpack
73
74
  key: v5-dummy-app-webpack-bundle-${{ steps.get-sha.outputs.sha }}
@@ -78,7 +79,7 @@ jobs:
78
79
  matrix:
79
80
  ruby: [2.7]
80
81
  node: [14]
81
- rake_task: ['run_rspec:all_dummy', 'run_rspec:all_but_examples', 'run_rspec:examples']
82
+ rake_task: ['run_rspec:all_but_examples', 'run_rspec:examples']
82
83
  runs-on: ubuntu-22.04
83
84
  steps:
84
85
  - uses: actions/checkout@v2
@@ -86,6 +87,7 @@ jobs:
86
87
  uses: ruby/setup-ruby@v1
87
88
  with:
88
89
  ruby-version: ${{ matrix.ruby }}
90
+ bundler: 2.4.9
89
91
  - name: Setup Node
90
92
  uses: actions/setup-node@v2-beta
91
93
  with:
@@ -100,33 +102,32 @@ jobs:
100
102
  echo "Yarn version: "; yarn --version
101
103
  echo "Bundler version: "; bundle --version
102
104
  - name: Save root node_modules to cache
103
- uses: actions/cache@v2
105
+ uses: actions/cache@v3
104
106
  with:
105
107
  path: node_modules
106
108
  key: v5-package-node-modules-cache-${{ hashFiles('yarn.lock') }}
107
109
  - name: Save root ruby gems to cache
108
- uses: actions/cache@v2
110
+ uses: actions/cache@v3
109
111
  with:
110
112
  path: vendor/bundle
111
113
  key: v5-package-app-gem-cache-${{ hashFiles('react_on_rails.gemspec') }}
112
114
  - name: Save dummy app ruby gems to cache
113
- uses: actions/cache@v2
115
+ uses: actions/cache@v3
114
116
  with:
115
117
  path: spec/dummy/vendor/bundle
116
118
  key: v5-dummy-app-gem-cache-${{ hashFiles('spec/dummy/Gemfile.lock') }}
117
119
  - name: Save spec/dummy/node_modules to cache
118
- uses: actions/cache@v2
120
+ uses: actions/cache@v3
119
121
  with:
120
122
  path: spec/dummy/node_modules
121
123
  key: v5-dummy-app-node-modules-cache-${{ hashFiles('spec/dummy/yarn.lock') }}
122
124
  - id: get-sha
123
125
  run: echo "::set-output name=sha::$(git rev-parse HEAD)"
124
126
  - name: Save test webpack bundles to cache (for build number checksum used by rspec job)
125
- uses: actions/cache@v2
127
+ uses: actions/cache@v3
126
128
  with:
127
129
  path: spec/dummy/public/webpack
128
130
  key: v5-dummy-app-webpack-bundle-${{ steps.get-sha.outputs.sha }}
129
-
130
131
  - name: Install Node modules with Yarn for renderer package
131
132
  run: |
132
133
  yarn install --no-progress --no-emoji
@@ -139,7 +140,7 @@ jobs:
139
140
  - name: Install Ruby Gems for package
140
141
  run: bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
141
142
  - name: Install Ruby Gems for dummy app
142
- run: cd spec/dummy && bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3
143
+ run: cd spec/dummy && bundle lock --add-platform 'x86_64-linux' && bundle check --path=vendor/bundle || bundle _2.4.9_ install --path=vendor/bundle --jobs=4 --retry=3
143
144
  - name: Ensure minimum required Chrome version
144
145
  run: |
145
146
  echo -e "Already installed $(google-chrome --version)\n"
@@ -152,16 +153,14 @@ jobs:
152
153
  sudo apt-get install google-chrome-stable
153
154
  echo -e "\nInstalled $(google-chrome --version)"
154
155
  fi
155
- - name: Touch webpack bundles
156
- run: touch spec/dummy/public/webpack/test/*
157
156
  - name: Install yalc globally
158
157
  run: sudo yarn global add yalc
159
158
  - name: Increase the amount of inotify watchers
160
159
  run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
161
- - name: Prep for CI
162
- run: bundle exec rails prepare_for_ci
160
+ - name: generate file system-based packs
161
+ run: cd spec/dummy && RAILS_ENV=test bundle exec rake react_on_rails:generate_packs
163
162
  - name: Main CI
164
- run: bundle exec rails ${{ matrix.rake_task }}
163
+ run: bundle exec rake ${{ matrix.rake_task }}
165
164
  - name: Store test results
166
165
  uses: actions/upload-artifact@v2
167
166
  with:
@@ -15,6 +15,7 @@ jobs:
15
15
  uses: ruby/setup-ruby@v1
16
16
  with:
17
17
  ruby-version: ${{ matrix.ruby }}
18
+ bundler: 2.4.9
18
19
  - name: Print system information
19
20
  run: |
20
21
  echo "Linux release: "; cat /etc/issue
data/.prettierignore CHANGED
@@ -3,10 +3,12 @@ package.json
3
3
  tmp/
4
4
  coverage/
5
5
  **/app/assets/webpack/
6
- spec/dummy/public
7
6
  gen-examples/examples/*
8
7
  node_package/lib/*
9
8
  spec/react_on_rails/dummy-for-generators/app/javascript/bundles/HelloWorld/*
10
9
  bundle/
11
10
  spec/dummy/lib/bs/**
11
+ spec/dummy/public
12
+ **/.yalc/**
13
+ **/generated/**
12
14
  *.bs.js
data/CHANGELOG.md CHANGED
@@ -17,6 +17,23 @@ Changes since last non-beta release.
17
17
 
18
18
  *Please add entries here for your pull requests that are not yet released.*
19
19
 
20
+ ### [13.3.5] - 2022-05-31
21
+ #### Fixed
22
+ - Fixed race condition where a react component could attempt to initialize before it had been registered. [PR 1540](https://github.com/shakacode/react_on_rails/pull/1540) by [judahmeek](https://github.com/judahmeek).
23
+
24
+ ### [13.3.4] - 2022-05-23
25
+
26
+ ### Added
27
+ - Improved functionality of Filesystem-based pack generation & auto-bundling. Added `make_generated_server_bundle_the_entrypoint` configuration key. [PR 1531](https://github.com/shakacode/react_on_rails/pull/1531) by [judahmeek](https://github.com/judahmeek).
28
+
29
+ ### Removed
30
+ - Removed unneeded `HMR=true` from `Procfile.dev` in install template [PR 1537](https://github.com/shakacode/react_on_rails/pull/1537) by [ahangarha](https://github.com/ahangarha).
31
+
32
+ ### [13.3.3] - 2022-03-21
33
+
34
+ ### Fixed
35
+ - Fixed bug regarding loading FS-based packs. [PR 1527](https://github.com/shakacode/react_on_rails/pull/1527) by [judahmeek](https://github.com/judahmeek).
36
+
20
37
  ### [13.3.2] - 2022-02-24
21
38
 
22
39
  ### Fixed
@@ -27,16 +44,16 @@ Changes since last non-beta release.
27
44
  - Optimized `ReactOnRails::TestHelper`'s RSpec integration using `when_first_matching_example_defined`. [PR 1496](https://github.com/shakacode/react_on_rails/pull/1496) by [mcls](https://github.com/mcls).
28
45
 
29
46
  ### Fixed
30
- - Fixed bug regarding FS-based packs generation. [PR 1515](https://github.com/shakacode/react_on_rails/pull/1515) by [pulkitkkr](https://github.com/pulkitkkr)
47
+ - Fixed bug regarding FS-based packs generation. [PR 1515](https://github.com/shakacode/react_on_rails/pull/1515) by [pulkitkkr](https://github.com/pulkitkkr).
31
48
 
32
49
  ### [13.3.0] - 2022-01-29
33
50
  ### Fixed
34
51
  - Fixed pack not found warning while using `react_component` and `react_component_hash` helpers, even when corresponding chunks are present. [PR 1511](https://github.com/shakacode/react_on_rails/pull/1511) by [pulkitkkr](https://github.com/pulkitkkr).
35
- - Fixed FS-based packs generation functionality to trigger pack generation on the creation of a new react component inside `components_subdirectory`. [PR 1506](https://github.com/shakacode/react_on_rails/pull/1506) by [pulkitkkr](https://github.com/pulkitkkr)
52
+ - Fixed FS-based packs generation functionality to trigger pack generation on the creation of a new react component inside `components_subdirectory`. [PR 1506](https://github.com/shakacode/react_on_rails/pull/1506) by [pulkitkkr](https://github.com/pulkitkkr).
36
53
  - Upgrade several JS dependencies to fix security issues. [PR 1514](https://github.com/shakacode/react_on_rails/pull/1514) by [ahangarha](https://github.com/ahangarha).
37
54
 
38
55
  ### Added
39
- - Added `./bin/dev` and `./bin/dev-static` executables to ease and standardize running the dev server. [PR 1491](https://github.com/shakacode/react_on_rails/pull/1491) by [ahangarha](https://github.com/ahangarha)
56
+ - Added `./bin/dev` and `./bin/dev-static` executables to ease and standardize running the dev server. [PR 1491](https://github.com/shakacode/react_on_rails/pull/1491) by [ahangarha](https://github.com/ahangarha).
40
57
 
41
58
  ### [13.2.0] - 2022-12-23
42
59
 
@@ -1072,7 +1089,10 @@ Best done with Object destructing:
1072
1089
  ##### Fixed
1073
1090
  - Fix several generator related issues.
1074
1091
 
1075
- [Unreleased]: https://github.com/shakacode/react_on_rails/compare/13.3.2...master
1092
+ [Unreleased]: https://github.com/shakacode/react_on_rails/compare/13.3.5...master
1093
+ [13.3.5]: https://github.com/shakacode/react_on_rails/compare/13.3.4...13.3.5
1094
+ [13.3.4]: https://github.com/shakacode/react_on_rails/compare/13.3.3...13.3.4
1095
+ [13.3.3]: https://github.com/shakacode/react_on_rails/compare/13.3.2...13.3.3
1076
1096
  [13.3.2]: https://github.com/shakacode/react_on_rails/compare/13.3.1...13.3.2
1077
1097
  [13.3.1]: https://github.com/shakacode/react_on_rails/compare/13.3.0...13.3.1
1078
1098
  [13.3.0]: https://github.com/shakacode/react_on_rails/compare/13.2.0...13.3.0
@@ -8,6 +8,7 @@ gem "sass-rails", "~> 6.0"
8
8
  gem "uglifier"
9
9
  gem "jquery-rails"
10
10
  gem "puma", "~> 5.0"
11
+ gem "bundler", "2.4.9"
11
12
 
12
13
  # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
13
14
  gem "turbolinks" if ENV["DISABLE_TURBOLINKS"].nil? || ENV["DISABLE_TURBOLINKS"].strip.empty?
@@ -46,5 +47,5 @@ group :test do
46
47
  gem "rspec-rails"
47
48
  gem "rspec-retry"
48
49
  gem "selenium-webdriver"
49
- gem "webdrivers", "3.9.4"
50
+ gem "webdrivers"
50
51
  end
data/README.md CHANGED
@@ -53,7 +53,7 @@ Given that `rails/webpacker` gem already provides basic React integration, why w
53
53
  1. Easy passing of props directly from your Rails view to your React components rather than having your Rails view load and then make a separate request to your API.
54
54
  Tight integration with [shakapacker](https://github.com/shakacode/shakapacker) (or it's predecessor [rails/webpacker](https://github.com/rails/webpacker)).
55
55
  1. Server-Side Rendering (SSR), often used for SEO crawler indexing and UX performance.
56
- 1. [Automated optimized entry-point creation and bundle inclusion when placing a component on a page. With this feature, you no longer need to configure `javascript_pack_tags` and `stylesheet_pack_tags` on your layouts based on what’s shown. “It just works!”](https://www.shakacode.com/react-on-rails/docs/guides/file-system-based-automated-bundle-generation.md)
56
+ 1. [Automated optimized entry-point creation and bundle inclusion when placing a component on a page. With this feature, you no longer need to configure `javascript_pack_tags` and `stylesheet_pack_tags` on your layouts based on what’s shown. “It just works!”](https://www.shakacode.com/react-on-rails/docs/guides/file-system-based-automated-bundle-generation/)
57
57
  1. [Redux](https://github.com/reactjs/redux) and [React Router](https://github.com/ReactTraining/react-router#readme) integration with server-side-rendering.
58
58
  1. [Internationalization (I18n) and (localization)](https://www.shakacode.com/react-on-rails/docs/guides/i18n)
59
59
  1. A supportive community. This [web search shows how live public sites are using React on Rails](https://publicwww.com/websites/%22react-on-rails%22++-undeveloped.com+depth%3Aall/).
@@ -127,3 +127,6 @@ The following companies support our open source projects, and ShakaCode uses the
127
127
  <a href="https://www.honeybadger.io">
128
128
  <img src="https://user-images.githubusercontent.com/4244251/184881133-79ee9c3c-8165-4852-958e-31687b9536f4.png" alt="Honeybadger" height="55px">
129
129
  </a>
130
+ <a href="https://reviewable.io">
131
+ <img src="https://user-images.githubusercontent.com/20628911/230848305-c94510a4-82d7-468f-bf9f-eeb81d3f2ce0.png" alt="Reviewable" height="55px">
132
+ </a>
@@ -178,11 +178,21 @@ ReactOnRails.configure do |config|
178
178
  # Change to a value like this example to enable this feature
179
179
  # config.components_subdirectory = "ror_components"
180
180
 
181
- # Default configuration to auto loading bundles for components.
182
- # default is false. The default can be overrident as an option in calls to view helpers
181
+ # Default is false.
182
+ # The default can be overidden as an option in calls to view helpers
183
183
  # `render_component` and `render_component_hash`. You may set to true to change the default to auto loading.
184
184
  config.auto_load_bundle = false
185
185
 
186
+ # Default is false
187
+ # Set this to true & instead of trying to import the generated server components into your existing
188
+ # server bundle entrypoint, the PacksGenerator will create a server bundle entrypoint using
189
+ # config.server_bundle_js_file for the filename.
190
+ config.make_generated_server_bundle_the_entrypoint = false
191
+
192
+ # Default is true, which matches Webpacker/Shakapacker's defer default for `append_javascript_pack`
193
+ # Set this to false to have `defer: false` added to your `append_javascript_pack` calls for generated entrypoints.
194
+ config.defer_generated_component_packs = true
195
+
186
196
  ################################################################################
187
197
  # I18N OPTIONS
188
198
  ################################################################################
@@ -101,7 +101,7 @@ Your layout would contain:
101
101
  <%= stylesheet_pack_tag 'application' %>
102
102
  ```
103
103
 
104
- Suppose, you want to use bundle splitting to minimize unnecessary javascript loaded on each page, you would put each of your components in the `packs` directory.
104
+ Now suppose you want to use bundle splitting to minimize unnecessary javascript loaded on each page, you would put each of your components in the `packs` directory.
105
105
 
106
106
  ```
107
107
  app/javascript:
@@ -124,23 +124,26 @@ The tricky part is to figure out which bundles to load on any Rails view. [Shaka
124
124
 
125
125
  #### Solution
126
126
 
127
- File-system-based automated pack generation simplifies this process with a new option for the view helpers. The steps to use it in this example are:
127
+ File-system-based automated pack generation simplifies this process with a new option for the view helpers.
128
128
 
129
- 1. Remove parameters passed directly to `javascript_pack_tag` and `stylesheet_pack_tag`.
130
- 2. Remove parameters passed directly to `append_javascript_pack_tag` and `append_stylesheet_pack_tag`.
129
+ For example, if you wanted to utilize our file-system based entrypoint generation for `FooComponentOne` & `BarComponentOne`, but not `BarComponentTwo` (for whatever reason), then...
130
+
131
+ 1. Remove generated entrypoints from parameters passed directly to `javascript_pack_tag` and `stylesheet_pack_tag`.
132
+ 2. Remove generated entrypoints from parameters passed directly to `append_javascript_pack_tag` and `append_stylesheet_pack_tag`.
131
133
 
132
134
  Your layout would now contain:
133
135
 
134
136
  ```erb
135
- <%= javascript_pack_tag %>
136
- <%= stylesheet_pack_tag %>
137
+ <%= javascript_pack_tag('BarComponentTwo') %>
138
+ <%= stylesheet_pack_tag('BarComponentTwo') %>
137
139
  ```
138
140
 
139
- 3. Create a directory structure as mentioned below:
141
+ 3. Create a directory structure where the components that you want to be auto-generated are within `ReactOnRails.configuration.components_subdirectory`, which should be a subdirectory of `Shakapacker.config.source_path`:
140
142
 
141
143
  ```
142
144
  app/javascript:
143
- └── packs
145
+ └── packs:
146
+ │ └── BarComponentTwo.jsx # Internally uses ReactOnRails.register
144
147
  └── src:
145
148
  │ └── Foo
146
149
  │ │ └── ...
@@ -150,18 +153,20 @@ app/javascript:
150
153
  │ │ └── ...
151
154
  │ │ └── ror_components # configured as `components_subdirectory`
152
155
  │ │ │ └── BarComponentOne.jsx
156
+ │ │ └── something_else
153
157
  │ │ │ └── BarComponentTwo.jsx
154
158
  ```
155
159
 
156
- 4. You no longer need to register these React components nor directly add their bundles. For example you can have a Rails view using three components:
160
+ 4. You no longer need to register the React components within the `ReactOnRails.configuration.components_subdirectory` nor directly add their bundles. For example you can have a Rails view using three components:
157
161
 
158
162
  ```erb
163
+ <% append_javascript_pack('BarComponentTwo'))>
159
164
  <%= react_component("FooComponentOne", {}, auto_load_bundle: true) %>
160
165
  <%= react_component("BarComponentOne", {}, auto_load_bundle: true) %>
161
- <%= react_component("BarComponentTwo", {}, auto_load_bundle: true) %>
166
+ <%= react_component("BarComponentTwo", {}) %>
162
167
  ```
163
168
 
164
- If `FooComponentOne` uses multiple HTML strings for server rendering, the [`react_component_hash`](https://www.shakacode.com/react-on-rails/docs/api/view-helpers-api/#react_component_hash) view helper can be used on the Rails view, as illustrated below.
169
+ If a component uses multiple HTML strings for server rendering, the [`react_component_hash`](https://www.shakacode.com/react-on-rails/docs/api/view-helpers-api/#react_component_hash) view helper can be used on the Rails view, as illustrated below.
165
170
 
166
171
  ```erb
167
172
  <% foo_component_one_data = react_component_hash("FooComponentOne",
@@ -185,6 +190,14 @@ Once generated, all server entrypoints will be imported into a file named `[Reac
185
190
 
186
191
  *Note: If specifying separate definitions for client and server rendering, please make sure to delete the generalized `ComponentName.jsx` file.*
187
192
 
193
+ ### Integrating auto-bundling into CI workflows
194
+
195
+ Currently, ReactOnRails contains conditional logic that checks for the existence of generated entrypoint files whenever `react_component` or one of its derivative methods are called. If a generated entrypoint of the same name as provided to `react_component` or `react_component_hash` exists, then an `append_javascript_pack` call is made automatically.
196
+
197
+ This means that `rake react_on_rails:generate_packs` or its programmatic equivalent must be run as a prerequisite to any sort of test or spec that would result in `react_component` or `react_component_hash` being called, even if the generated entrypoint files have already been bundled in a previous workflow/job.
198
+
199
+ Caching of the generated entrypoints between workflow/jobs should also resolve this issue.
200
+
188
201
  ### Using Automated Bundle Generation Feature with already defined packs
189
202
 
190
203
  To use the Automated Bundle Generation feature with already defined packs, `config/initializers/react_on_rails` should explicitly be configured with `config.auto_load_bundle = false` and you can explicitly pass `auto_load_bundle` option in [`react_component`](https://www.shakacode.com/react-on-rails/docs/api/view-helpers-api/#react_component) and [`react_component_hash`](https://www.shakacode.com/react-on-rails/docs/api/view-helpers-api/#react_component_hash) for the components using this feature.
@@ -1,5 +1,5 @@
1
1
  # Procfile for development using HMR
2
2
  # You can run these commands in separate shells
3
3
  rails: bundle exec rails s -p 3000
4
- wp-client: HMR=true bin/webpacker-dev-server
5
- wp-server: HMR=true SERVER_BUNDLE_ONLY=yes bin/webpacker --watch
4
+ wp-client: bin/webpacker-dev-server
5
+ wp-server: SERVER_BUNDLE_ONLY=yes bin/webpacker --watch
@@ -9,10 +9,6 @@ module ReactOnRails
9
9
  end
10
10
 
11
11
  DEFAULT_GENERATED_ASSETS_DIR = File.join(%w[public webpack], Rails.env).freeze
12
- DEFAULT_COMPONENTS_SUBDIRECTORY = nil
13
- DEFAULT_SERVER_RENDER_TIMEOUT = 20
14
- DEFAULT_POOL_SIZE = 1
15
- DEFAULT_RANDOM_DOM_ID = true # for backwards compatability
16
12
 
17
13
  def self.configuration
18
14
  @configuration ||= Configuration.new(
@@ -28,8 +24,8 @@ module ReactOnRails
28
24
  raise_on_prerender_error: Rails.env.development?,
29
25
  trace: Rails.env.development?,
30
26
  development_mode: Rails.env.development?,
31
- server_renderer_pool_size: DEFAULT_POOL_SIZE,
32
- server_renderer_timeout: DEFAULT_SERVER_RENDER_TIMEOUT,
27
+ server_renderer_pool_size: 1,
28
+ server_renderer_timeout: 20,
33
29
  skip_display_none: nil,
34
30
  # skip_display_none is deprecated
35
31
  webpack_generated_files: %w[manifest.json],
@@ -38,35 +34,37 @@ module ReactOnRails
38
34
  server_render_method: nil,
39
35
  build_test_command: "",
40
36
  build_production_command: "",
41
- random_dom_id: DEFAULT_RANDOM_DOM_ID,
37
+ random_dom_id: true,
42
38
  same_bundle_for_client_and_server: false,
43
39
  i18n_output_format: nil,
44
- components_subdirectory: DEFAULT_COMPONENTS_SUBDIRECTORY
40
+ components_subdirectory: nil,
41
+ make_generated_server_bundle_the_entrypoint: false,
42
+ defer_generated_component_packs: true
45
43
  )
46
44
  end
47
45
 
48
46
  class Configuration
49
47
  attr_accessor :node_modules_location, :server_bundle_js_file, :prerender, :replay_console,
50
- :trace, :development_mode,
51
- :logging_on_server, :server_renderer_pool_size,
48
+ :trace, :development_mode, :logging_on_server, :server_renderer_pool_size,
52
49
  :server_renderer_timeout, :skip_display_none, :raise_on_prerender_error,
53
- :generated_assets_dirs, :generated_assets_dir,
50
+ :generated_assets_dirs, :generated_assets_dir, :components_subdirectory,
54
51
  :webpack_generated_files, :rendering_extension, :build_test_command,
55
- :build_production_command,
56
- :i18n_dir, :i18n_yml_dir, :i18n_output_format,
52
+ :build_production_command, :i18n_dir, :i18n_yml_dir, :i18n_output_format,
57
53
  :server_render_method, :random_dom_id, :auto_load_bundle,
58
- :same_bundle_for_client_and_server, :rendering_props_extension, :components_subdirectory
54
+ :same_bundle_for_client_and_server, :rendering_props_extension,
55
+ :make_generated_server_bundle_the_entrypoint,
56
+ :defer_generated_component_packs
59
57
 
60
58
  # rubocop:disable Metrics/AbcSize
61
59
  def initialize(node_modules_location: nil, server_bundle_js_file: nil, prerender: nil,
62
- replay_console: nil,
60
+ replay_console: nil, make_generated_server_bundle_the_entrypoint: nil,
63
61
  trace: nil, development_mode: nil,
64
62
  logging_on_server: nil, server_renderer_pool_size: nil,
65
63
  server_renderer_timeout: nil, raise_on_prerender_error: true,
66
64
  skip_display_none: nil, generated_assets_dirs: nil,
67
65
  generated_assets_dir: nil, webpack_generated_files: nil,
68
66
  rendering_extension: nil, build_test_command: nil,
69
- build_production_command: nil,
67
+ build_production_command: nil, defer_generated_component_packs: nil,
70
68
  same_bundle_for_client_and_server: nil,
71
69
  i18n_dir: nil, i18n_yml_dir: nil, i18n_output_format: nil,
72
70
  random_dom_id: nil, server_render_method: nil, rendering_props_extension: nil,
@@ -106,6 +104,8 @@ module ReactOnRails
106
104
  self.server_render_method = server_render_method
107
105
  self.components_subdirectory = components_subdirectory
108
106
  self.auto_load_bundle = auto_load_bundle
107
+ self.make_generated_server_bundle_the_entrypoint = make_generated_server_bundle_the_entrypoint
108
+ self.defer_generated_component_packs = defer_generated_component_packs
109
109
  end
110
110
  # rubocop:enable Metrics/AbcSize
111
111
 
@@ -313,19 +313,12 @@ module ReactOnRails
313
313
  @rails_context.merge(serverSide: server_side)
314
314
  end
315
315
 
316
- def load_pack_for_component(component_name)
317
- is_component_pack_present = File.exist?(generated_components_pack_path(component_name))
318
- is_development = ENV["RAILS_ENV"] == "development"
319
-
320
- if is_development && !is_component_pack_present
321
- ReactOnRails::PacksGenerator.instance.generate_packs_if_stale
322
- raise_missing_pack_error(component_name)
323
- end
324
-
316
+ def load_pack_for_generated_component(component_name)
325
317
  ReactOnRails::WebpackerUtils.raise_nested_entries_disabled unless ReactOnRails::WebpackerUtils.nested_entries?
326
318
 
327
- append_javascript_pack_tag "generated/#{component_name}"
328
- append_stylesheet_pack_tag "generated/#{component_name}"
319
+ append_javascript_pack_tag("generated/#{component_name}",
320
+ defer: ReactOnRails.configuration.defer_generated_component_packs)
321
+ append_stylesheet_pack_tag("generated/#{component_name}")
329
322
  end
330
323
 
331
324
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
@@ -446,7 +439,11 @@ module ReactOnRails
446
439
  # Create the HTML rendering part
447
440
  result = server_rendered_react_component(render_options)
448
441
 
449
- load_pack_for_component react_component_name if render_options.auto_load_bundle
442
+ if render_options.auto_load_bundle
443
+ is_component_pack_present = File.exist?(generated_components_pack_path(react_component_name))
444
+
445
+ load_pack_for_generated_component(react_component_name) if is_component_pack_present
446
+ end
450
447
 
451
448
  {
452
449
  render_options: render_options,
@@ -551,16 +548,6 @@ module ReactOnRails
551
548
  result
552
549
  end
553
550
 
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
551
  def replay_console_option(val)
565
552
  val.nil? ? ReactOnRails.configuration.replay_console : val
566
553
  end
@@ -78,6 +78,8 @@ module ReactOnRails
78
78
  end
79
79
 
80
80
  def add_generated_pack_to_server_bundle
81
+ return if ReactOnRails.configuration.make_generated_server_bundle_the_entrypoint
82
+
81
83
  relative_path_to_generated_server_bundle = relative_path(server_bundle_entrypoint,
82
84
  generated_server_bundle_file_path)
83
85
  content = <<~FILE_CONTENT
@@ -93,11 +95,15 @@ module ReactOnRails
93
95
  end
94
96
 
95
97
  def generated_server_bundle_file_path
98
+ return server_bundle_entrypoint if ReactOnRails.configuration.make_generated_server_bundle_the_entrypoint
99
+
96
100
  generated_server_bundle_file_path = server_bundle_entrypoint.sub(".js", "-generated.js")
97
101
  generated_server_bundle_file_name = component_name(generated_server_bundle_file_path)
98
- source_entry_path = ReactOnRails::WebpackerUtils.webpacker_source_entry_path
102
+ source_entrypoint_parent = Pathname(ReactOnRails::WebpackerUtils.webpacker_source_entry_path).parent
103
+ generated_nonentrypoints_path = "#{source_entrypoint_parent}/generated"
99
104
 
100
- "#{source_entry_path}/#{generated_server_bundle_file_name}.js"
105
+ FileUtils.mkdir_p(generated_nonentrypoints_path)
106
+ "#{generated_nonentrypoints_path}/#{generated_server_bundle_file_name}.js"
101
107
  end
102
108
 
103
109
  def clean_generated_packs_directory
@@ -214,12 +220,11 @@ module ReactOnRails
214
220
 
215
221
  def stale_or_missing_packs?
216
222
  component_files = common_component_to_path.values + client_component_to_path.values
217
- most_recent_mtime = Utils.find_most_recent_mtime(component_files)
223
+ most_recent_mtime = Utils.find_most_recent_mtime(component_files).to_i
218
224
 
219
225
  component_files.each_with_object([]).any? do |file|
220
226
  path = generated_pack_path(file)
221
-
222
- !File.exist?(path) || File.mtime(path) < most_recent_mtime
227
+ !File.exist?(path) || File.mtime(path).to_i < most_recent_mtime
223
228
  end
224
229
  end
225
230
  end
@@ -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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReactOnRails
4
- VERSION = "13.3.3"
4
+ VERSION = "13.3.5"
5
5
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "13.3.3",
3
+ "version": "13.3.5",
4
4
  "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
5
  "main": "node_package/lib/ReactOnRails.js",
6
6
  "directories": {
@@ -16,7 +16,12 @@ namespace :dummy_apps do
16
16
  bundle_install_in(dummy_app_dir)
17
17
  end
18
18
 
19
- task dummy_apps: %i[dummy_app node_package] do
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
@@ -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 empty js_tests] do
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.3.3
4
+ version: 13.3.5
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-03-21 00:00:00.000000000 Z
11
+ date: 2023-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable