react_on_rails 12.0.0.pre.beta.4 → 12.0.3
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/.github/workflows/lint-js-and-ruby.yml +53 -0
- data/.github/workflows/main.yml +178 -0
- data/.github/workflows/package-js-tests.yml +35 -0
- data/.github/workflows/rspec-package-specs.yml +45 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +8 -4
- data/CHANGELOG.md +37 -20
- data/CONTRIBUTING.md +1 -1
- data/NEWS.md +5 -0
- data/README.md +65 -62
- data/SUMMARY.md +1 -1
- data/docs/additional-reading/converting-from-custom-webpack-config-to-rails-webpacker-config.md +10 -0
- data/docs/additional-reading/react-router.md +1 -1
- data/docs/additional-reading/recommended-project-structure.md +69 -0
- data/docs/additional-reading/server-rendering-tips.md +4 -1
- data/docs/api/javascript-api.md +3 -3
- data/docs/api/redux-store-api.md +2 -2
- data/docs/api/view-helpers-api.md +4 -4
- data/docs/basics/client-vs-server-rendering.md +2 -0
- data/docs/basics/configuration.md +1 -1
- data/docs/basics/hmr-and-hot-reloading-with-the-webpack-dev-server.md +64 -9
- data/docs/basics/react-server-rendering.md +8 -5
- data/docs/basics/render-functions-and-railscontext.md +1 -1
- data/docs/basics/upgrading-react-on-rails.md +47 -10
- data/docs/basics/webpack-configuration.md +12 -18
- data/docs/misc/doctrine.md +0 -1
- data/docs/outdated/code-splitting.md +3 -3
- data/docs/tutorial.md +6 -0
- data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +4 -1
- data/lib/react_on_rails/helper.rb +8 -8
- data/lib/react_on_rails/utils.rb +5 -1
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/webpacker_utils.rb +4 -4
- data/lib/tasks/assets.rake +17 -5
- data/package.json +1 -1
- data/rakelib/examples.rake +1 -1
- data/rakelib/lint.rake +1 -1
- data/rakelib/release.rake +1 -3
- metadata +10 -5
- data/docs/basics/recommended-project-structure.md +0 -77
data/package.json
CHANGED
data/rakelib/examples.rake
CHANGED
data/rakelib/lint.rake
CHANGED
data/rakelib/release.rake
CHANGED
@@ -67,8 +67,6 @@ task :release, %i[gem_version dry_run tools_install] do |_t, args|
|
|
67
67
|
sh_in_dir(gem_root, release_it_command)
|
68
68
|
|
69
69
|
# Release the new gem version
|
70
|
-
unless is_dry_run
|
71
|
-
sh_in_dir(gem_root, "gem release")
|
72
|
-
end
|
70
|
+
sh_in_dir(gem_root, "gem release") unless is_dry_run
|
73
71
|
end
|
74
72
|
# rubocop:enable Metrics/BlockLength
|
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: 12.0.
|
4
|
+
version: 12.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Gordon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -318,6 +318,10 @@ files:
|
|
318
318
|
- ".eslintignore"
|
319
319
|
- ".eslintrc"
|
320
320
|
- ".github/FUNDING.yml"
|
321
|
+
- ".github/workflows/lint-js-and-ruby.yml"
|
322
|
+
- ".github/workflows/main.yml"
|
323
|
+
- ".github/workflows/package-js-tests.yml"
|
324
|
+
- ".github/workflows/rspec-package-specs.yml"
|
321
325
|
- ".gitignore"
|
322
326
|
- ".npmignore"
|
323
327
|
- ".prettierignore"
|
@@ -346,6 +350,7 @@ files:
|
|
346
350
|
- docs/additional-reading/asset-pipeline.md
|
347
351
|
- docs/additional-reading/capistrano-deployment.md
|
348
352
|
- docs/additional-reading/convert-rails-5-api-only-app.md
|
353
|
+
- docs/additional-reading/converting-from-custom-webpack-config-to-rails-webpacker-config.md
|
349
354
|
- docs/additional-reading/credits.md
|
350
355
|
- docs/additional-reading/elastic-beanstalk.md
|
351
356
|
- docs/additional-reading/foreman-issues.md
|
@@ -356,6 +361,7 @@ files:
|
|
356
361
|
- docs/additional-reading/react-and-redux.md
|
357
362
|
- docs/additional-reading/react-helmet.md
|
358
363
|
- docs/additional-reading/react-router.md
|
364
|
+
- docs/additional-reading/recommended-project-structure.md
|
359
365
|
- docs/additional-reading/server-rendering-tips.md
|
360
366
|
- docs/additional-reading/tips.md
|
361
367
|
- docs/additional-reading/troubleshooting-when-using-webpacker.md
|
@@ -380,7 +386,6 @@ files:
|
|
380
386
|
- docs/basics/migrating-from-react-rails.md
|
381
387
|
- docs/basics/minitest-configuration.md
|
382
388
|
- docs/basics/react-server-rendering.md
|
383
|
-
- docs/basics/recommended-project-structure.md
|
384
389
|
- docs/basics/render-functions-and-railscontext.md
|
385
390
|
- docs/basics/rspec-configuration.md
|
386
391
|
- docs/basics/upgrading-react-on-rails.md
|
@@ -503,9 +508,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
503
508
|
version: 2.5.0
|
504
509
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
505
510
|
requirements:
|
506
|
-
- - "
|
511
|
+
- - ">="
|
507
512
|
- !ruby/object:Gem::Version
|
508
|
-
version:
|
513
|
+
version: '0'
|
509
514
|
requirements: []
|
510
515
|
rubygems_version: 3.0.8
|
511
516
|
signing_key:
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# Recommended Project structure
|
2
|
-
|
3
|
-
The React on Rails generator uses the standard `rails/webpacker` convention of this structure:
|
4
|
-
|
5
|
-
```yml
|
6
|
-
app/javascript:
|
7
|
-
├── bundles:
|
8
|
-
│ # Logical groups of files that can be used for code splitting
|
9
|
-
│ └── hello-world-bundle.js
|
10
|
-
├── packs:
|
11
|
-
│ # only webpack entry files here
|
12
|
-
│ └── hello-world-bundle.js
|
13
|
-
```
|
14
|
-
|
15
|
-
However, you may wish to move all your client side files to a single directory called something like `/client`.
|
16
|
-
|
17
|
-
## Steps to convert from the generator defaults to use a `/client` directory structure.
|
18
|
-
|
19
|
-
1. Move the directory:
|
20
|
-
|
21
|
-
```
|
22
|
-
mv app/javascript client
|
23
|
-
```
|
24
|
-
|
25
|
-
2. Edit your `/config/webpacker.yml` file. Change the `default/source_path`:
|
26
|
-
|
27
|
-
```yml
|
28
|
-
source_path: client
|
29
|
-
```
|
30
|
-
|
31
|
-
## Moving node_modules from `/` to `/client` with a custom webpack setup.
|
32
|
-
|
33
|
-
`rails/webpacker` probably doesn't support having your main node_modules directory under `/client`, so only follow these steps if you want to use your own webpack configuration.
|
34
|
-
|
35
|
-
1. Move the `/package.json` to `/client/package.json`
|
36
|
-
2. Create a `/package.json` that delegates to `/client/package.json`. See the example in [spec/dummy/package.json](../../spec/dummy/package.json).
|
37
|
-
3. See the webpack configuration in [spec/dummy/client](../../spec/dummy/client) for a webpack configuration example.
|
38
|
-
|
39
|
-
|
40
|
-
## JavaScript Assets
|
41
|
-
1. `/client`: All client side JavaScript goes under the `/client` directory. Place all the major domains of the client side app under client.
|
42
|
-
1. `/client/app`: All application JavaScript. Note the adherence to the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript#naming-conventions) where we name the files to correspond to exported Objects (PascalCase) or exported functions (camelCase). We don't use dashes or snake_case for JavaScript files, except for possibly some config files.
|
43
|
-
1. `/client/app/bundles`: Top level of different app domains. Use a name within this directory for you app domains. For example, if you had a domain called `widget-editing`, then you would have: `/client/app/bundles/widget-editing`
|
44
|
-
1. `/client/app/lib`: Common code for bundles
|
45
|
-
1. Within each bundle directory (or the lib directory), such as a domain named "comments"
|
46
|
-
`/client/app/bundles/comments`, use following directory structure, if you're using redux. However, with React hooks, this will probably be a bit different:
|
47
|
-
|
48
|
-
* `/actions`: Redux actions.
|
49
|
-
* `/components`: "dumb" components (no connections to Redux or Ajax). These get props and can render themselves and children.
|
50
|
-
* `/constants`: Constants used by Redux actions and reducers.
|
51
|
-
* `/containers`: "smart" components. These components are bound to Redux.
|
52
|
-
* `/reducers`: Reducers for redux.
|
53
|
-
* `/routes`: Routes for React Router.
|
54
|
-
* `/store`: Store, which might be [configured differently for dev vs. production](https://github.com/reactjs/redux/tree/master/examples/real-world/store).
|
55
|
-
* `/startup`: Component bindings to stores, with registration of components and stores.
|
56
|
-
* `/schemas`: Schemas for AJAX JSON requests and responses, as used by the [Normalizr](https://github.com/gaearon/normalizr) package.
|
57
|
-
|
58
|
-
## CSS, Sass, Fonts, and Images
|
59
|
-
Should you move your styling assets to Webpack? Or stick with the plain Rails asset pipeline. It depends! You have 2 basic choices:
|
60
|
-
|
61
|
-
### Simple Rails Way
|
62
|
-
This isn't really any technique, as you keep handling all your styling assets using Rails standard tools, such as using the [sass-rails gem](https://rubygems.org/gems/sass-rails/versions/5.0.4). Basically, Webpack doesn't get involved with styling. Your Rails layouts just doing the styling the standard Rails way.
|
63
|
-
|
64
|
-
#### Advantages
|
65
|
-
1. Much simpler! There's no changes really from your current processes.
|
66
|
-
|
67
|
-
### Using Webpack to Manage Styling Assets
|
68
|
-
This technique involves customization of the webpack config files to generate CSS, image, and font assets.
|
69
|
-
|
70
|
-
#### Directory structure
|
71
|
-
1. `/client/app/assets`: Assets for CSS for client app.
|
72
|
-
1. `/client/app/assets/fonts` and `/client/app/assets/styles`: Globally shared assets for styling. Note, most Sass and image assets will be stored next to the JavaScript files.
|
73
|
-
|
74
|
-
#### Advantages
|
75
|
-
1. You can use [CSS modules](https://github.com/css-modules/css-modules), which is super compelling once you seen the benefits.
|
76
|
-
1. You can do hot reloading of your assets. Thus, you do not have to refresh your web page to see asset change, including changing styles.
|
77
|
-
1. You can run your client code on a mocked out express server for super fast prototyping. In other words, your client application can somewhat more easily be move to a different application server.
|