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 +4 -4
- data/.circleci/config.yml +5 -4
- data/.github/workflows/lint-js-and-ruby.yml +2 -1
- data/.github/workflows/main.yml +18 -19
- data/.github/workflows/rspec-package-specs.yml +1 -0
- data/.prettierignore +3 -1
- data/CHANGELOG.md +24 -4
- data/Gemfile.development_dependencies +2 -1
- data/README.md +4 -1
- data/docs/guides/configuration.md +12 -2
- data/docs/guides/file-system-based-automated-bundle-generation.md +24 -11
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +2 -2
- data/lib/react_on_rails/configuration.rb +16 -16
- data/lib/react_on_rails/helper.rb +9 -22
- data/lib/react_on_rails/packs_generator.rb +10 -5
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +1 -1
- data/lib/react_on_rails/version.rb +1 -1
- data/package.json +1 -1
- data/rakelib/dummy_apps.rake +6 -1
- data/rakelib/run_rspec.rake +1 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4483ea8d99927209e3115c17b967b22a187637111724b7928d3c7a4ff8672981
|
4
|
+
data.tar.gz: 121595ddc9e1d581ff289e4796bdd660b2107e504a30a1fdc5594daa7f2f411c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
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
|
data/.github/workflows/main.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
name: Main test
|
2
2
|
|
3
|
-
on: [push
|
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@
|
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@
|
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@
|
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@
|
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:
|
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@
|
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@
|
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@
|
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@
|
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@
|
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:
|
162
|
-
run: bundle exec
|
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
|
163
|
+
run: bundle exec rake ${{ matrix.rake_task }}
|
165
164
|
- name: Store test results
|
166
165
|
uses: actions/upload-artifact@v2
|
167
166
|
with:
|
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.
|
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"
|
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
|
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
|
182
|
-
#
|
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
|
-
|
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.
|
127
|
+
File-system-based automated pack generation simplifies this process with a new option for the view helpers.
|
128
128
|
|
129
|
-
|
130
|
-
|
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
|
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
|
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", {}
|
166
|
+
<%= react_component("BarComponentTwo", {}) %>
|
162
167
|
```
|
163
168
|
|
164
|
-
If
|
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:
|
5
|
-
wp-server:
|
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:
|
32
|
-
server_renderer_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:
|
37
|
+
random_dom_id: true,
|
42
38
|
same_bundle_for_client_and_server: false,
|
43
39
|
i18n_output_format: nil,
|
44
|
-
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,
|
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
|
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
|
328
|
-
|
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
|
-
|
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
|
-
|
102
|
+
source_entrypoint_parent = Pathname(ReactOnRails::WebpackerUtils.webpacker_source_entry_path).parent
|
103
|
+
generated_nonentrypoints_path = "#{source_entrypoint_parent}/generated"
|
99
104
|
|
100
|
-
|
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)
|
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.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-
|
11
|
+
date: 2023-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|