webpacker 4.0.0.pre.3 → 4.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.node-version +1 -1
  3. data/.travis.yml +6 -4
  4. data/CHANGELOG.md +38 -0
  5. data/CONTRIBUTING.md +33 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +64 -59
  8. data/README.md +16 -4
  9. data/docs/assets.md +7 -4
  10. data/docs/css.md +51 -8
  11. data/docs/es6.md +1 -1
  12. data/docs/troubleshooting.md +1 -1
  13. data/docs/webpack.md +42 -1
  14. data/gemfiles/Gemfile-rails-edge +1 -1
  15. data/gemfiles/Gemfile-rails.4.2.x +1 -1
  16. data/gemfiles/Gemfile-rails.5.0.x +1 -1
  17. data/gemfiles/Gemfile-rails.5.1.x +1 -1
  18. data/gemfiles/Gemfile-rails.5.2.x +1 -1
  19. data/lib/install/coffee.rb +2 -2
  20. data/lib/install/config/babel.config.js +70 -0
  21. data/lib/install/config/postcss.config.js +12 -0
  22. data/lib/install/config/webpacker.yml +22 -0
  23. data/lib/install/elm.rb +2 -2
  24. data/lib/install/erb.rb +2 -2
  25. data/lib/install/examples/elm/Main.elm +5 -4
  26. data/lib/install/examples/elm/hello_elm.js +6 -2
  27. data/lib/install/examples/react/babel.config.js +83 -0
  28. data/lib/install/examples/vue/hello_vue.js +6 -4
  29. data/lib/install/loaders/typescript.js +8 -3
  30. data/lib/install/react.rb +6 -20
  31. data/lib/install/template.rb +5 -4
  32. data/lib/install/typescript.rb +3 -3
  33. data/lib/install/vue.rb +4 -4
  34. data/lib/tasks/webpacker/compile.rake +3 -5
  35. data/lib/tasks/webpacker/yarn_install.rake +1 -1
  36. data/lib/webpacker/compiler.rb +4 -13
  37. data/lib/webpacker/configuration.rb +8 -0
  38. data/lib/webpacker/dev_server.rb +0 -9
  39. data/lib/webpacker/dev_server_runner.rb +12 -5
  40. data/lib/webpacker/helper.rb +10 -14
  41. data/lib/webpacker/manifest.rb +58 -21
  42. data/lib/webpacker/railtie.rb +3 -2
  43. data/lib/webpacker/version.rb +1 -1
  44. data/lib/webpacker/webpack_runner.rb +13 -2
  45. data/package.json +31 -27
  46. data/package/__tests__/config.js +25 -3
  47. data/package/config.js +15 -7
  48. data/package/environments/__tests__/base.js +5 -3
  49. data/package/environments/base.js +41 -4
  50. data/package/environments/production.js +17 -6
  51. data/package/rules/babel.js +10 -4
  52. data/package/rules/file.js +2 -2
  53. data/package/rules/index.js +7 -2
  54. data/package/rules/node_modules.js +22 -0
  55. data/package/utils/__tests__/get_style_rule.js +20 -0
  56. data/package/utils/get_style_rule.js +6 -5
  57. data/package/utils/helpers.js +12 -1
  58. data/test/compiler_test.rb +2 -0
  59. data/test/dev_server_runner_test.rb +51 -0
  60. data/test/helper_test.rb +28 -5
  61. data/test/manifest_test.rb +10 -0
  62. data/test/rake_tasks_test.rb +34 -0
  63. data/test/test_app/config/application.rb +1 -0
  64. data/test/test_app/config/webpack/development.js +0 -0
  65. data/test/test_app/config/webpacker.yml +25 -0
  66. data/test/test_app/package.json +13 -0
  67. data/test/test_app/public/packs/manifest.json +10 -1
  68. data/test/test_app/yarn.lock +11 -0
  69. data/test/webpack_runner_test.rb +51 -0
  70. data/yarn.lock +2669 -1809
  71. metadata +20 -8
  72. data/lib/install/config/.babelrc +0 -41
  73. data/lib/install/config/.postcssrc.yml +0 -3
  74. data/lib/install/examples/react/.babelrc +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8e384470d6faa4e062e9fdb92fb40b7c72b59cab7c35e7b3850f59da66fbdc6
4
- data.tar.gz: 1d27eaeb75a2b05f359decd2b37c7d7624e55d3ccb5224969d58c0633f295fc1
3
+ metadata.gz: e52c39041f23ecbc17950281b9c67171f6fad95a9032a65a354c6a952837022b
4
+ data.tar.gz: a796ef041974243ac16301c12635cfba31f0e009104a4a03616e4cff47ef721b
5
5
  SHA512:
6
- metadata.gz: 2fb2a78d8fbfdc1280d13288903a5572c1e09140e9b47f6f6acd092e9dfd004d1e2a6c5c36ad27c67925ac7b1994ac5bcc5fe8586c334b358467605f5a67615a
7
- data.tar.gz: 30bf2a91f82b6e069545a891faaccbe419c1359cc547fe713bd5cfb6933cea393c8159eb37820178c7d41213d14a49cb31c9022eed713ca29664904ca7c41615
6
+ metadata.gz: b9009fcf8926de9d75cc6f98f89a735aca447c314b5df54c2715cfb960e9cceedad2fbd4a98db27a73fa73085062a67ae7b406e76c0610d207a7bd0f3406f17e
7
+ data.tar.gz: 2f17f73477c88cc5eebd6a01fb483269532bb2d5885d755d4d22f76b357c036a7145e30878eaccbeda140ef17a56f9b8d603088547c85c0fe165ce255ee10d99
@@ -1 +1 @@
1
- 6.14.0
1
+ 6.14.4
@@ -3,9 +3,9 @@ language: ruby
3
3
  before_install:
4
4
  - gem update --system
5
5
  rvm:
6
- - 2.3.7
7
- - 2.4.4
8
- - 2.5.1
6
+ - 2.3.8
7
+ - 2.4.5
8
+ - 2.5.3
9
9
  - ruby-head
10
10
  gemfile:
11
11
  - gemfiles/Gemfile-rails.4.2.x
@@ -34,5 +34,7 @@ matrix:
34
34
  allow_failures:
35
35
  - gemfile: gemfiles/Gemfile-rails-edge
36
36
  exclude:
37
- - rvm: 2.3.7
37
+ - rvm: 2.3.8
38
38
  gemfile: gemfiles/Gemfile-rails-edge
39
+ - rvm: ruby-head
40
+ gemfile: gemfiles/Gemfile-rails.4.2.x
@@ -1,5 +1,43 @@
1
1
  **Please note that Webpacker 3.1.0 and 3.1.1 have some serious bugs so please consider using either 3.0.2 or 3.2.0**
2
2
 
3
+ ## [4.0.0.rc.1] - 2018-12-14
4
+
5
+ ## Breaking changes
6
+
7
+ - Order of rules changed so you might have to change append to prepend,
8
+ depending on how you want to process packs [#1823](https://github.com/rails/webpacker/pull/1823)
9
+ ```js
10
+ environment.loaders.prepend()
11
+ ```
12
+ - Separate CSS extraction from build environment [#1625](https://github.com/rails/webpacker/pull/1625)
13
+ ```yml
14
+ # Extract and emit a css file
15
+ extract_css: true
16
+ ```
17
+ - Separate rule to compile node modules
18
+ (fixes cases where ES6 libraries were included in the app code) [#1823](https://github.com/rails/webpacker/pull/1823)
19
+ - File loader extensions API [#1823](https://github.com/rails/webpacker/pull/1823)
20
+ ```yml
21
+ # webpacker.yml
22
+ static_assets_extensions:
23
+ - .pdf
24
+ # etc..
25
+ ```
26
+
27
+ ### Added
28
+
29
+ - Move `.babelrc` and `.postcssrc` to `.js` variant [#1822](https://github.com/rails/webpacker/pull/1822)
30
+ - Use postcss safe parser when optimising css assets [#1822](https://github.com/rails/webpacker/pull/1822)
31
+ - Add split chunks api (undocumented)
32
+ ```js
33
+ const { environment } = require('@rails/webpacker')
34
+ // Enable with default config
35
+ environment.splitChunks()
36
+ // Configure via a callback
37
+ environment.splitChunks((config) => Object.assign({}, config, { optimization: { splitChunks: false }}))
38
+ ```
39
+ - Allow changing static file extensions using webpacker.yml (undocumented)
40
+
3
41
  ## [4.0.0-pre.3] - 2018-10-01
4
42
 
5
43
  ### Added
@@ -0,0 +1,33 @@
1
+ ## Setting Up a Development Environment
2
+
3
+ 1. Install [Yarn](https://yarnpkg.com/)
4
+
5
+ 2. Run the following commands to set up the development environment.
6
+ ```
7
+ bundle install
8
+ yarn
9
+ ```
10
+
11
+ ## Making sure your changes pass all tests
12
+ There are a number of automated checks which run on Travis CI when a pull request is created.
13
+ You can run those checks on your own locally to make sure that your changes would not break the CI build.
14
+
15
+ ### 1. Check the code for JavaScript style violations
16
+ ```
17
+ yarn lint
18
+ ```
19
+
20
+ ### 2. Check the code for Ruby style violations
21
+ ```
22
+ bundle exec rubocop
23
+ ```
24
+
25
+ ### 3. Run the JavaScript test suite
26
+ ```
27
+ yarn test
28
+ ```
29
+
30
+ ### 4. Run the Ruby test suite
31
+ ```
32
+ bundle exec rake test
33
+ ```
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ gemspec
4
4
 
5
5
  gem "rails"
6
6
  gem "rake", ">= 11.1"
7
- gem "rubocop", ">= 0.49", require: false
7
+ gem "rubocop", git: "https://github.com/rubocop-hq/rubocop.git", require: false
8
8
  gem "rack-proxy", require: false
9
9
 
10
10
  group :test do
@@ -1,7 +1,20 @@
1
+ GIT
2
+ remote: https://github.com/rubocop-hq/rubocop.git
3
+ revision: 3d4ba9c2d0782b352bf807cd9fed66ce58e83641
4
+ specs:
5
+ rubocop (0.61.1)
6
+ jaro_winkler (~> 1.5.1)
7
+ parallel (~> 1.10)
8
+ parser (>= 2.5, != 2.5.1.1)
9
+ powerpack (~> 0.1)
10
+ rainbow (>= 2.2.2, < 4.0)
11
+ ruby-progressbar (~> 1.7)
12
+ unicode-display_width (~> 1.4.0)
13
+
1
14
  PATH
2
15
  remote: .
3
16
  specs:
4
- webpacker (4.0.0.pre.3)
17
+ webpacker (4.0.0.rc.1)
5
18
  activesupport (>= 4.2)
6
19
  rack-proxy (>= 0.6.1)
7
20
  railties (>= 4.2)
@@ -9,43 +22,43 @@ PATH
9
22
  GEM
10
23
  remote: https://rubygems.org/
11
24
  specs:
12
- actioncable (5.2.1)
13
- actionpack (= 5.2.1)
25
+ actioncable (5.2.2)
26
+ actionpack (= 5.2.2)
14
27
  nio4r (~> 2.0)
15
28
  websocket-driver (>= 0.6.1)
16
- actionmailer (5.2.1)
17
- actionpack (= 5.2.1)
18
- actionview (= 5.2.1)
19
- activejob (= 5.2.1)
29
+ actionmailer (5.2.2)
30
+ actionpack (= 5.2.2)
31
+ actionview (= 5.2.2)
32
+ activejob (= 5.2.2)
20
33
  mail (~> 2.5, >= 2.5.4)
21
34
  rails-dom-testing (~> 2.0)
22
- actionpack (5.2.1)
23
- actionview (= 5.2.1)
24
- activesupport (= 5.2.1)
35
+ actionpack (5.2.2)
36
+ actionview (= 5.2.2)
37
+ activesupport (= 5.2.2)
25
38
  rack (~> 2.0)
26
39
  rack-test (>= 0.6.3)
27
40
  rails-dom-testing (~> 2.0)
28
41
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
29
- actionview (5.2.1)
30
- activesupport (= 5.2.1)
42
+ actionview (5.2.2)
43
+ activesupport (= 5.2.2)
31
44
  builder (~> 3.1)
32
45
  erubi (~> 1.4)
33
46
  rails-dom-testing (~> 2.0)
34
47
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
35
- activejob (5.2.1)
36
- activesupport (= 5.2.1)
48
+ activejob (5.2.2)
49
+ activesupport (= 5.2.2)
37
50
  globalid (>= 0.3.6)
38
- activemodel (5.2.1)
39
- activesupport (= 5.2.1)
40
- activerecord (5.2.1)
41
- activemodel (= 5.2.1)
42
- activesupport (= 5.2.1)
51
+ activemodel (5.2.2)
52
+ activesupport (= 5.2.2)
53
+ activerecord (5.2.2)
54
+ activemodel (= 5.2.2)
55
+ activesupport (= 5.2.2)
43
56
  arel (>= 9.0)
44
- activestorage (5.2.1)
45
- actionpack (= 5.2.1)
46
- activerecord (= 5.2.1)
57
+ activestorage (5.2.2)
58
+ actionpack (= 5.2.2)
59
+ activerecord (= 5.2.2)
47
60
  marcel (~> 0.3.1)
48
- activesupport (5.2.1)
61
+ activesupport (5.2.2)
49
62
  concurrent-ruby (~> 1.0, >= 1.0.2)
50
63
  i18n (>= 0.7, < 2)
51
64
  minitest (~> 5.1)
@@ -54,72 +67,64 @@ GEM
54
67
  ast (2.4.0)
55
68
  builder (3.2.3)
56
69
  byebug (10.0.2)
57
- concurrent-ruby (1.0.5)
70
+ concurrent-ruby (1.1.3)
58
71
  crass (1.0.4)
59
72
  erubi (1.7.1)
60
73
  globalid (0.4.1)
61
74
  activesupport (>= 4.2.0)
62
- i18n (1.1.0)
75
+ i18n (1.2.0)
63
76
  concurrent-ruby (~> 1.0)
64
77
  jaro_winkler (1.5.1)
65
- loofah (2.2.2)
78
+ loofah (2.2.3)
66
79
  crass (~> 1.0.2)
67
80
  nokogiri (>= 1.5.9)
68
- mail (2.7.0)
81
+ mail (2.7.1)
69
82
  mini_mime (>= 0.1.1)
70
- marcel (0.3.2)
83
+ marcel (0.3.3)
71
84
  mimemagic (~> 0.3.2)
72
- method_source (0.9.0)
85
+ method_source (0.9.2)
73
86
  mimemagic (0.3.2)
74
87
  mini_mime (1.0.1)
75
88
  mini_portile2 (2.3.0)
76
89
  minitest (5.11.3)
77
90
  nio4r (2.3.1)
78
- nokogiri (1.8.4)
91
+ nokogiri (1.8.5)
79
92
  mini_portile2 (~> 2.3.0)
80
93
  parallel (1.12.1)
81
- parser (2.5.1.2)
94
+ parser (2.5.3.0)
82
95
  ast (~> 2.4.0)
83
96
  powerpack (0.1.2)
84
- rack (2.0.5)
85
- rack-proxy (0.6.4)
97
+ rack (2.0.6)
98
+ rack-proxy (0.6.5)
86
99
  rack
87
100
  rack-test (1.1.0)
88
101
  rack (>= 1.0, < 3)
89
- rails (5.2.1)
90
- actioncable (= 5.2.1)
91
- actionmailer (= 5.2.1)
92
- actionpack (= 5.2.1)
93
- actionview (= 5.2.1)
94
- activejob (= 5.2.1)
95
- activemodel (= 5.2.1)
96
- activerecord (= 5.2.1)
97
- activestorage (= 5.2.1)
98
- activesupport (= 5.2.1)
102
+ rails (5.2.2)
103
+ actioncable (= 5.2.2)
104
+ actionmailer (= 5.2.2)
105
+ actionpack (= 5.2.2)
106
+ actionview (= 5.2.2)
107
+ activejob (= 5.2.2)
108
+ activemodel (= 5.2.2)
109
+ activerecord (= 5.2.2)
110
+ activestorage (= 5.2.2)
111
+ activesupport (= 5.2.2)
99
112
  bundler (>= 1.3.0)
100
- railties (= 5.2.1)
113
+ railties (= 5.2.2)
101
114
  sprockets-rails (>= 2.0.0)
102
115
  rails-dom-testing (2.0.3)
103
116
  activesupport (>= 4.2.0)
104
117
  nokogiri (>= 1.6)
105
118
  rails-html-sanitizer (1.0.4)
106
119
  loofah (~> 2.2, >= 2.2.2)
107
- railties (5.2.1)
108
- actionpack (= 5.2.1)
109
- activesupport (= 5.2.1)
120
+ railties (5.2.2)
121
+ actionpack (= 5.2.2)
122
+ activesupport (= 5.2.2)
110
123
  method_source
111
124
  rake (>= 0.8.7)
112
125
  thor (>= 0.19.0, < 2.0)
113
126
  rainbow (3.0.0)
114
- rake (12.3.1)
115
- rubocop (0.58.2)
116
- jaro_winkler (~> 1.5.1)
117
- parallel (~> 1.10)
118
- parser (>= 2.5, != 2.5.1.1)
119
- powerpack (~> 0.1)
120
- rainbow (>= 2.2.2, < 4.0)
121
- ruby-progressbar (~> 1.7)
122
- unicode-display_width (~> 1.0, >= 1.0.1)
127
+ rake (12.3.2)
123
128
  ruby-progressbar (1.10.0)
124
129
  sprockets (3.7.2)
125
130
  concurrent-ruby (~> 1.0)
@@ -128,7 +133,7 @@ GEM
128
133
  actionpack (>= 4.0)
129
134
  activesupport (>= 4.0)
130
135
  sprockets (>= 3.0.0)
131
- thor (0.20.0)
136
+ thor (0.20.3)
132
137
  thread_safe (0.3.6)
133
138
  tzinfo (1.2.5)
134
139
  thread_safe (~> 0.1)
@@ -147,8 +152,8 @@ DEPENDENCIES
147
152
  rack-proxy
148
153
  rails
149
154
  rake (>= 11.1)
150
- rubocop (>= 0.49)
155
+ rubocop!
151
156
  webpacker!
152
157
 
153
158
  BUNDLED WITH
154
- 1.16.4
159
+ 1.17.1
data/README.md CHANGED
@@ -41,6 +41,7 @@ in which case you may not even need the asset pipeline. This is mostly relevant
41
41
  - [Watched](#watched)
42
42
  - [Deployment](#deployment)
43
43
  - [Docs](#docs)
44
+ - [Contributing](#contributing)
44
45
  - [License](#license)
45
46
 
46
47
  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
@@ -50,7 +51,7 @@ in which case you may not even need the asset pipeline. This is mostly relevant
50
51
 
51
52
  * Ruby 2.2+
52
53
  * Rails 4.2+
53
- * Node.js 6.14.0+
54
+ * Node.js 6.14.4+
54
55
  * Yarn 1.x+
55
56
 
56
57
 
@@ -91,7 +92,7 @@ yarn add https://github.com/rails/webpacker.git
91
92
 
92
93
  # OR to try out 4.x pre-release
93
94
  gem 'webpacker', '>= 4.0.x'
94
- yarn add @rails/webpacker@4.0.0-pre.2
95
+ yarn add @rails/webpacker@next
95
96
  ```
96
97
 
97
98
  Finally, run the following to install Webpacker:
@@ -230,7 +231,7 @@ staging:
230
231
  public_output_path: packs-staging
231
232
  ```
232
233
 
233
- or, Webpacker will use production environment as a fallback environment for loading configurations. Please note, `NODE_ENV` can either be set to `production` or `development`.
234
+ or, Webpacker will use production environment as a fallback environment for loading configurations. Please note, `NODE_ENV` can either be set to `production`, `development` or `test`.
234
235
  This means you don't need to create additional environment files inside `config/webpacker/*` and instead use webpacker.yml to load different configurations using `RAILS_ENV`.
235
236
 
236
237
  For example, the below command will compile assets in production mode but will use staging configurations from `config/webpacker.yml` if available or use fallback production environment configuration:
@@ -271,7 +272,7 @@ yarn upgrade @rails/webpacker --latest
271
272
  yarn add webpack-dev-server@^2.11.1
272
273
 
273
274
  # Or to install a latest release (including pre-releases)
274
- yarn add @rails/webpacker@4.0.0-pre.2
275
+ yarn add @rails/webpacker@next
275
276
  ```
276
277
 
277
278
  ### Yarn Integrity
@@ -345,11 +346,13 @@ development environment. This can be done in the `config/initializers/content_se
345
346
  with the following code:
346
347
 
347
348
  ```ruby
349
+ Rails.application.config.content_security_policy do |policy|
348
350
  if Rails.env.development?
349
351
  policy.script_src :self, :https, :unsafe_eval
350
352
  else
351
353
  policy.script_src :self, :https
352
354
  end
355
+ end
353
356
  ```
354
357
 
355
358
 
@@ -373,11 +376,13 @@ This can be done in the `config/initializers/content_security_policy.rb` with th
373
376
  configuration:
374
377
 
375
378
  ```ruby
379
+ Rails.application.config.content_security_policy do |policy|
376
380
  if Rails.env.development?
377
381
  policy.script_src :self, :https, :unsafe_eval
378
382
  else
379
383
  policy.script_src :self, :https
380
384
  end
385
+ end
381
386
  ```
382
387
  You can read more about this in the [Vue docs](https://vuejs.org/v2/guide/installation.html#CSP-environments).
383
388
 
@@ -510,10 +515,17 @@ Webpacker::Compiler.watched_paths << 'bower_components'
510
515
 
511
516
  Webpacker hooks up a new `webpacker:compile` task to `assets:precompile`, which gets run whenever you run `assets:precompile`. If you are not using Sprockets, `webpacker:compile` is automatically aliased to `assets:precompile`. Similar to sprockets both rake tasks will compile packs in production mode but will use `RAILS_ENV` to load configuration from `config/webpacker.yml` (if available).
512
517
 
518
+
513
519
  ## Docs
514
520
 
515
521
  You can find more detailed guides under [docs](./docs).
516
522
 
517
523
 
524
+ ## Contributing
525
+ [![Code Helpers](https://www.codetriage.com/rails/webpacker/badges/users.svg)](https://www.codetriage.com/rails/webpacker)
526
+
527
+ We encourage you to contribute to Webpacker! See [CONTRIBUTING](CONTRIBUTING.md) for guidelines about how to proceed.
528
+
529
+
518
530
  ## License
519
531
  Webpacker is released under the [MIT License](https://opensource.org/licenses/MIT).
@@ -56,12 +56,12 @@ You can also use [babel-plugin-module-resolver](https://github.com/tleunen/babel
56
56
  yarn add babel-plugin-module-resolver
57
57
  ```
58
58
 
59
- Specify the plugin in your `.babelrc` with the custom root or alias. Here's an example:
59
+ Specify the plugin in your `babel.config.js` with the custom root or alias. Here's an example:
60
60
 
61
- ```json
61
+ ```js
62
62
  {
63
- "plugins": [
64
- ["module-resolver", {
63
+ plugins: [
64
+ [require("module-resolver").default, {
65
65
  "root": ["./app"],
66
66
  "alias": {
67
67
  "assets": "./assets"
@@ -103,4 +103,7 @@ app/javascript:
103
103
 
104
104
  <img src="<%= asset_pack_path 'images/calendar.png' %>" />
105
105
  <% # => <img src="/packs/images/calendar.png" /> %>
106
+
107
+ <%= image_pack_tag 'images/calendar.png' %>
108
+ <% # => <img src="/packs/images/calendar.png" /> %>
106
109
  ```
@@ -16,7 +16,7 @@ Webpacker supports importing CSS, Sass and SCSS files directly into your JavaScr
16
16
 
17
17
  ```js
18
18
  // React component example
19
- // app/javascripts/packs/hello_react.jsx
19
+ // app/javascript/packs/hello_react.jsx
20
20
 
21
21
  import React from 'react'
22
22
  import helloIcon from '../hello_react/images/icon.png'
@@ -44,7 +44,7 @@ Stylesheets end with `.module.*` is treated as [CSS Modules](https://github.com/
44
44
 
45
45
  ```js
46
46
  // React component example
47
- // app/javascripts/packs/hello_react.jsx
47
+ // app/javascript/packs/hello_react.jsx
48
48
 
49
49
  import React from 'react'
50
50
  import helloIcon from '../hello_react/images/icon.png'
@@ -64,7 +64,7 @@ const Hello = props => (
64
64
  ## Link styles from your Rails views
65
65
 
66
66
  Under the hood webpack uses
67
- [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) plugin to extract all the referenced styles within your app and compile it into
67
+ [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) plugin to extract all the referenced styles within your app and compile it into
68
68
  a separate `[pack_name].css` bundle so that in your view you can use the
69
69
  `stylesheet_pack_tag` helper.
70
70
 
@@ -72,6 +72,7 @@ a separate `[pack_name].css` bundle so that in your view you can use the
72
72
  <%= stylesheet_pack_tag 'hello_react' %>
73
73
  ```
74
74
 
75
+ Webpacker emits css files only if `extract_css` is set to true in webpacker.yml otherwise `stylesheet_pack_tag` returns nil.
75
76
 
76
77
  ## Add bootstrap
77
78
 
@@ -102,13 +103,22 @@ Or in your app/javascript/app.sass file:
102
103
 
103
104
  Webpacker out-of-the-box provides CSS post-processing using
104
105
  [postcss-loader](https://github.com/postcss/postcss-loader)
105
- and the installer sets up a standard `.postcssrc.yml`
106
+ and the installer sets up a standard `postcss.config.js`
106
107
  file in your app root with standard plugins.
107
108
 
108
- ```yml
109
- plugins:
110
- postcss-import: {}
111
- postcss-preset-env: {}
109
+ ```js
110
+ module.exports = {
111
+ plugins: [
112
+ require('postcss-import'),
113
+ require('postcss-flexbugs-fixes'),
114
+ require('postcss-preset-env')({
115
+ autoprefixer: {
116
+ flexbox: 'no-2009'
117
+ },
118
+ stage: 3
119
+ })
120
+ ]
121
+ }
112
122
  ```
113
123
 
114
124
  ## Using CSS with [vue-loader](https://github.com/vuejs/vue-loader)
@@ -144,3 +154,36 @@ environment.loaders.get('sass').use.splice(-1, 0, {
144
154
  }
145
155
  });
146
156
  ```
157
+
158
+ ## Working with TypeScript
159
+
160
+ In order to get CSS to work with typescript you have two options.
161
+ You can either use `require` to bypass typescript special `import`.
162
+
163
+ ```ts
164
+ const styles = require('../hello_react/styles/hello-react');
165
+ ```
166
+ You may also use the package [typings-for-css-modules-loader](https://github.com/Jimdo/typings-for-css-modules-loader) instead of `css-loader` to automatically generate typescript `.d.ts` files in order to help resolve any css/scss styles. To do that:
167
+
168
+ ```js
169
+ // app/javascript/packs/hello_react.jsx
170
+ import * as styles from '../hello_react.styles/hello-react.module.scss';
171
+ ```
172
+
173
+ ```bash
174
+ yarn add --dev typings-for-css-modules-loader
175
+ ```
176
+
177
+ ```js
178
+ // webpack/environment.js
179
+ const { environment } = require('@rails/webpacker')
180
+
181
+ // replace css-loader with typings-for-css-modules-loader
182
+ environment.loaders.get('moduleSass').use = environment.loaders.get('moduleSass').use.map((u) => {
183
+ if(u.loader == 'css-loader') {
184
+ return { ...u, loader: 'typings-for-css-modules-loader' };
185
+ } else {
186
+ return u;
187
+ }
188
+ });
189
+ ```