Skip to content

Commit 46acb0f

Browse files
committed
feat(ServerRendering) generate an initializer to precompile the manifest; support --skip-server-rendering
1 parent 46ab33a commit 46acb0f

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-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: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
class InstallGeneratorTest < Rails::Generators::TestCase
55
destination File.join(Rails.root, 'tmp', 'generator_test_output')
66
tests React::Generators::InstallGenerator
7+
setup :prepare_destination
78

89
def copy_directory(dir)
910
source = Rails.root.join(dir)
@@ -70,6 +71,18 @@ def copy_directory(dir)
7071
assert_file server_rendering_file_path, %r{//= require ./components\n}
7172
end
7273

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

0 commit comments

Comments
 (0)