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

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.
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
+ ```