Skip to content

Commit 6fe8c19

Browse files
committed
feat(ServerRendering) generate an initializer to precompile the manifest; support --skip-server-rendering
1 parent 26756c8 commit 6fe8c19

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ where you will put your components
5151
//= require react_ujs
5252
//= require components
5353
```
54-
- create a `server_rendering.js` manifest file
54+
- create a `server_rendering.js` manifest file and precompile it with `config/initializers/react_server_rendering.rb`. (Use `--skip-server-rendering` if you don't want this.)
5555

5656
## Usage
5757

lib/generators/react/install_generator.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ class InstallGenerator < ::Rails::Generators::Base
1111
default: false,
1212
desc: 'Skip Git keeps'
1313

14+
class_option :skip_server_rendering,
15+
type: :boolean,
16+
default: false,
17+
desc: "Don't generate server_rendering.js or config/initializers/react_server_rendering.rb"
18+
1419
def create_directory
1520
empty_directory 'app/assets/javascripts/components'
16-
create_file 'app/assets/javascripts/components/.gitkeep' unless options[:skip_git]
21+
if !options[:skip_git]
22+
create_file 'app/assets/javascripts/components/.gitkeep'
23+
end
1724
end
1825

1926
def inject_react
@@ -49,8 +56,11 @@ def create_components
4956
end
5057

5158
def create_server_rendering
52-
file_path = 'app/assets/javascripts/server_rendering.js'
53-
template("server_rendering.js", file_path)
59+
return if options[:skip_server_rendering]
60+
manifest_path = "app/assets/javascripts/server_rendering.js"
61+
template("server_rendering.js", manifest_path)
62+
initializer_path = "config/initializers/react_server_rendering.rb"
63+
template("react_server_rendering.rb", initializer_path)
5464
end
5565

5666
private
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# To render React components in production, precompile the server rendering manifest:
2+
Rails.application.config.assets.precompile += ["server_rendering.js"]

test/generators/install_generator_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ def copy_directory(dir)
7070
assert_file server_rendering_file_path, %r{//= require ./components\n}
7171
end
7272

73+
test "creates server rendering initializer" do
74+
run_generator
75+
initializer_path = "config/initializers/react_server_rendering.rb"
76+
assert_file(initializer_path, %r{Rails.application.config.assets.precompile \+= \["server_rendering.js"\]})
77+
end
78+
79+
test "skipping server rendering" do
80+
run_generator %w(--skip-server-rendering)
81+
assert_no_file "config/initializers/react_server_rendering.rb"
82+
assert_no_file "app/assets/javascripts/server_rendering.js"
83+
end
84+
7385
def init_application_js(content)
7486
FileUtils.mkdir_p destination_root + '/app/assets/javascripts/'
7587
File.write destination_root + '/app/assets/javascripts/application.js', content

0 commit comments

Comments
 (0)