Skip to content

Commit db43f02

Browse files
alexeyr-cialexeyr
andauthored
Update react-on-rails import to /client as needed (#1703)
* Update the optimization opportunity warning * Update react-on-rails import to /client as needed * Update pack generator * Fix remaining warning --------- Co-authored-by: Alexey Romanov <[email protected]>
1 parent a0a4c1c commit db43f02

15 files changed

+28
-23
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ Changes since the last non-beta release.
3636
### Changed
3737

3838
- The global context is now accessed using `globalThis`. [PR 1727](https://github.com/shakacode/react_on_rails/pull/1727) by [alexeyr-ci2](https://github.com/alexeyr-ci2).
39+
- Generated client packs now import from `react-on-rails/client` instead of `react-on-rails`. [PR 1706](https://github.com/shakacode/react_on_rails/pull/1706) by [alexeyr-ci](https://github.com/alexeyr-ci).
40+
- The "optimization opportunity" message when importing the server-side `react-on-rails` instead of `react-on-rails/client` in browsers is now a warning for two reasons:
41+
- Make it more prominent
42+
- Include a stack trace when clicked
3943

4044
### [15.0.0-alpha.2] - 2025-03-07
4145

docs/guides/how-to-use-different-files-for-client-and-server-rendering.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Many projects will have different entry points for client and server rendering.
99
Your Client Entry can look like this:
1010

1111
```js
12-
import ReactOnRails from 'react-on-rails';
12+
import ReactOnRails from 'react-on-rails/client';
1313
import App from './ClientApp';
1414
ReactOnRails.register({ App });
1515
```
@@ -22,7 +22,7 @@ import App from './ServerApp';
2222
ReactOnRails.register({ App });
2323
```
2424

25-
Note that the only difference is on the second line of each of these examples.
25+
Note that the only difference is in the imports.
2626

2727
## B. Two Options for Using Webpack Resolve Alias in the Webpack Config
2828

docs/javascript/code-splitting.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Here's an example of how you might use this in practice:
3939
#### clientRegistration.js
4040

4141
```js
42-
import ReactOnRails from 'node_package/lib/ReactOnRails';
42+
import ReactOnRails from 'react-on-rails/client';
4343
import NavigationApp from './NavigationApp';
4444

4545
// Note that we're importing a different RouterApp than in serverRegistration.js
@@ -76,7 +76,7 @@ Note that you should not register a renderer on the server, since there won't be
7676
#### RouterAppRenderer.jsx
7777

7878
```jsx
79-
import ReactOnRails from 'react-on-rails';
79+
import ReactOnRails from 'react-on-rails/client';
8080
import React from 'react';
8181
import ReactDOM from 'react-dom';
8282
import Router from 'react-router/lib/Router';

lib/generators/react_on_rails/templates/base/base/app/javascript/packs/registration.js.tt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import ReactOnRails from 'react-on-rails';
1+
import ReactOnRails from 'react-on-rails/client';
22

33
import <%= config[:component_name] %> from '<%= config[:app_relative_path] %>';
44

lib/react_on_rails/packs_generator.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def pack_file_contents(file_path)
107107
relative_component_path = relative_component_path_from_generated_pack(file_path)
108108

109109
<<~FILE_CONTENT.strip
110-
import ReactOnRails from 'react-on-rails';
110+
import ReactOnRails from 'react-on-rails/client';
111111
import #{registered_component_name} from '#{relative_component_path}';
112112
113113
ReactOnRails.register({#{registered_component_name}});

node_package/src/ReactOnRails.full.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import type { RenderParams, RenderResult, ErrorOptions } from './types';
55
import Client from './ReactOnRails.client';
66

77
if (typeof window !== 'undefined') {
8-
console.log(
9-
'Optimization opportunity: "react-on-rails" includes ~14KB of server-rendering code. Browsers may not need it. See https://forum.shakacode.com/t/how-to-use-different-versions-of-a-file-for-client-and-server-rendering/1352 (Requires creating a free account)',
8+
// warn to include a collapsed stack trace
9+
console.warn(
10+
'Optimization opportunity: "react-on-rails" includes ~14KB of server-rendering code. Browsers may not need it. See https://forum.shakacode.com/t/how-to-use-different-versions-of-a-file-for-client-and-server-rendering/1352 (Requires creating a free account). Click this for the stack trace.',
1011
);
1112
}
1213

spec/dummy/app/views/pages/client_side_hello_world.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<br/>
2323
<pre>
2424
import HelloWorld from '../components/HelloWorld';
25-
import ReactOnRails from 'react-on-rails';
25+
import ReactOnRails from 'react-on-rails/client';
2626
ReactOnRails.register({ HelloWorld });
2727
</pre>
2828
</li>

spec/dummy/app/views/pages/server_side_hello_world.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
<br/>
4949
<pre>
5050
import HelloWorld from '../components/HelloWorld';
51-
import ReactOnRails from 'react-on-rails';
51+
import ReactOnRails from 'react-on-rails/client';
5252
ReactOnRails.register({ HelloWorld });
5353
</pre>
5454
</li>

spec/dummy/app/views/pages/server_side_redux_app.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<br/>
3838
<pre>
3939
import ReduxApp from './ClientReduxApp';
40-
import ReactOnRails from 'react-on-rails';
40+
import ReactOnRails from 'react-on-rails/client';
4141
ReactOnRails.register({ ReduxApp });
4242
</pre>
4343
</li>

spec/dummy/app/views/pages/server_side_redux_app_cached.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<br/>
4444
<pre>
4545
import ReduxApp from './ClientReduxApp';
46-
import ReactOnRails from 'react-on-rails';
46+
import ReactOnRails from 'react-on-rails/client';
4747
ReactOnRails.register({ ReduxApp });
4848
</pre>
4949
</li>

spec/dummy/app/views/pages/xhr_refresh.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<br/>
3333
<pre style='white-space: pre-wrap; word-break: keep-all;'>
3434
import HellowWorldRehydratable from '../components/HellowWorldRehydratable';
35-
import ReactOnRails from 'react-on-rails';
35+
import ReactOnRails from 'react-on-rails/client';
3636
ReactOnRails.register({ HellowWorldRehydratable });
3737
</pre>
3838
</li>

spec/dummy/client/app/startup/HelloWorldRehydratable.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import PropTypes from 'prop-types';
22
import React from 'react';
3-
import ReactOnRails from 'react-on-rails';
3+
import ReactOnRails from 'react-on-rails/client';
44
import RailsContext from '../components/RailsContext';
55

66
class HelloWorldRehydratable extends React.Component {

spec/dummy/client/app/startup/ReduxSharedStoreApp.client.jsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
// Top level component for client side.
2-
// Compare this to the ./ServerApp.jsx file which is used for server side rendering.
1+
// Top level component for the client side.
2+
// Compare this to the ./ReduxSharedStoreApp.server.jsx file which is used for server side rendering.
33

44
import React from 'react';
55
import { Provider } from 'react-redux';
6-
import ReactOnRails from 'react-on-rails';
6+
import ReactOnRails from 'react-on-rails/client';
77
import ReactDOMClient from 'react-dom/client';
88

99
import HelloWorldContainer from '../components/HelloWorldContainer';

spec/dummy/client/app/startup/ReduxSharedStoreApp.server.jsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Top level component for serer side.
2-
// Compare this to the ./ClientReduxSharedStoreApp.jsx file which is used for client side rendering.
1+
// Top level component for the server side.
2+
// Compare this to the ./ReduxSharedStoreApp.client.jsx file which is used for client side rendering.
33

44
import React from 'react';
55
import ReactOnRails from 'react-on-rails';

spec/dummy/spec/packs_generator_spec.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def self.configuration
258258
component_name = "ReactClientComponentWithClientAndServer"
259259
component_pack = "#{generated_directory}/#{component_name}.js"
260260
pack_content = File.read(component_pack)
261-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails';")
261+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
262262
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
263263
expect(pack_content).not_to include("registerServerComponent")
264264
end
@@ -294,7 +294,7 @@ def self.configuration
294294
component_name = "ReactClientComponent"
295295
component_pack = "#{generated_directory}/#{component_name}.js"
296296
pack_content = File.read(component_pack)
297-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails';")
297+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
298298
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
299299
expect(pack_content).not_to include("registerServerComponent")
300300
end
@@ -310,7 +310,7 @@ def self.configuration
310310
component_name = "ReactServerComponent"
311311
component_pack = "#{generated_directory}/#{component_name}.js"
312312
pack_content = File.read(component_pack)
313-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails';")
313+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
314314
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
315315
expect(pack_content).not_to include("registerServerComponent")
316316
end
@@ -326,7 +326,7 @@ def self.configuration
326326
component_name = "ReactServerComponent"
327327
component_pack = "#{generated_directory}/#{component_name}.js"
328328
pack_content = File.read(component_pack)
329-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails';")
329+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
330330
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
331331
expect(pack_content).not_to include("registerServerComponent")
332332
end

0 commit comments

Comments
 (0)