webpacker 5.2.1 → 6.0.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -1
  3. data/.github/workflows/jest.yml +1 -1
  4. data/.github/workflows/js-lint.yml +1 -1
  5. data/.github/workflows/ruby.yml +9 -6
  6. data/.gitignore +2 -0
  7. data/.node-version +1 -1
  8. data/.rubocop.yml +11 -16
  9. data/6_0_upgrade.md +48 -0
  10. data/CHANGELOG.md +27 -0
  11. data/CONTRIBUTING.md +1 -1
  12. data/Gemfile.lock +23 -15
  13. data/README.md +252 -103
  14. data/config/README.md +3 -0
  15. data/config/webpacker.yml +1 -0
  16. data/lib/install/config/webpack/base.js +3 -0
  17. data/lib/install/config/webpack/development.js +2 -2
  18. data/lib/install/config/webpack/production.js +2 -2
  19. data/lib/install/config/webpack/test.js +2 -2
  20. data/lib/install/config/webpacker.yml +12 -39
  21. data/lib/install/{javascript/packs → packs/entrypoints}/application.js +5 -3
  22. data/lib/install/template.rb +36 -22
  23. data/lib/tasks/webpacker.rake +2 -11
  24. data/lib/tasks/webpacker/binstubs.rake +6 -4
  25. data/lib/tasks/webpacker/check_binstubs.rake +4 -4
  26. data/lib/tasks/webpacker/check_yarn.rake +1 -2
  27. data/lib/tasks/webpacker/compile.rake +4 -2
  28. data/lib/tasks/webpacker/info.rake +12 -10
  29. data/lib/tasks/webpacker/install.rake +6 -4
  30. data/lib/tasks/webpacker/verify_install.rake +2 -1
  31. data/lib/tasks/webpacker/yarn_install.rake +9 -1
  32. data/lib/webpacker/commands.rb +3 -2
  33. data/lib/webpacker/compiler.rb +16 -9
  34. data/lib/webpacker/configuration.rb +6 -30
  35. data/lib/webpacker/dev_server_runner.rb +23 -2
  36. data/lib/webpacker/helper.rb +26 -36
  37. data/lib/webpacker/manifest.rb +1 -1
  38. data/lib/webpacker/version.rb +1 -1
  39. data/lib/webpacker/webpack_runner.rb +6 -0
  40. data/package.json +23 -39
  41. data/package/__tests__/config.js +5 -37
  42. data/package/__tests__/development.js +11 -12
  43. data/package/__tests__/env.js +12 -4
  44. data/package/__tests__/index.js +9 -0
  45. data/package/__tests__/production.js +6 -6
  46. data/package/__tests__/staging.js +7 -6
  47. data/package/__tests__/test.js +4 -5
  48. data/package/babel/preset.js +55 -0
  49. data/package/config.js +3 -11
  50. data/package/env.js +8 -2
  51. data/package/environments/__tests__/base.js +19 -51
  52. data/package/environments/base.js +65 -125
  53. data/package/environments/development.js +46 -44
  54. data/package/environments/production.js +66 -64
  55. data/package/environments/test.js +2 -2
  56. data/package/index.js +13 -8
  57. data/package/rules/babel.js +9 -7
  58. data/package/rules/coffee.js +6 -0
  59. data/package/rules/erb.js +15 -0
  60. data/package/rules/file.js +21 -19
  61. data/package/rules/index.js +16 -18
  62. data/package/rules/less.js +22 -0
  63. data/package/rules/raw.js +5 -0
  64. data/package/rules/sass.js +12 -9
  65. data/package/rules/stylus.js +26 -0
  66. data/package/utils/get_style_rule.js +26 -36
  67. data/package/utils/helpers.js +26 -35
  68. data/test/compiler_test.rb +0 -12
  69. data/test/configuration_test.rb +3 -34
  70. data/test/dev_server_runner_test.rb +33 -6
  71. data/test/engine_rake_tasks_test.rb +39 -0
  72. data/test/helper_test.rb +15 -9
  73. data/test/mounted_app/Rakefile +4 -0
  74. data/test/mounted_app/test/dummy/Rakefile +3 -0
  75. data/test/mounted_app/test/dummy/bin/rails +3 -0
  76. data/test/mounted_app/test/dummy/bin/rake +3 -0
  77. data/test/mounted_app/test/dummy/config.ru +5 -0
  78. data/test/mounted_app/test/dummy/config/application.rb +10 -0
  79. data/test/mounted_app/test/dummy/config/environment.rb +3 -0
  80. data/test/mounted_app/test/dummy/config/webpacker.yml +75 -0
  81. data/test/mounted_app/test/dummy/package.json +7 -0
  82. data/test/rake_tasks_test.rb +1 -10
  83. data/test/test_app/app/{javascript/packs → packs/entrypoints}/application.js +1 -1
  84. data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.css +0 -0
  85. data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.js +0 -0
  86. data/test/test_app/config/webpacker.yml +3 -27
  87. data/test/test_app/config/webpacker_public_root.yml +0 -1
  88. data/test/test_app/public/packs/manifest.json +17 -13
  89. data/test/test_app/some.config.js +0 -0
  90. data/test/webpack_runner_test.rb +9 -3
  91. data/webpacker.gemspec +1 -1
  92. data/yarn.lock +1858 -4915
  93. metadata +54 -97
  94. data/.travis.yml +0 -43
  95. data/docs/assets.md +0 -119
  96. data/docs/cloud9.md +0 -310
  97. data/docs/css.md +0 -308
  98. data/docs/deployment.md +0 -130
  99. data/docs/docker.md +0 -68
  100. data/docs/engines.md +0 -213
  101. data/docs/env.md +0 -63
  102. data/docs/es6.md +0 -72
  103. data/docs/folder-structure.md +0 -66
  104. data/docs/integrations.md +0 -220
  105. data/docs/misc.md +0 -23
  106. data/docs/props.md +0 -223
  107. data/docs/target.md +0 -22
  108. data/docs/testing.md +0 -136
  109. data/docs/troubleshooting.md +0 -158
  110. data/docs/typescript.md +0 -190
  111. data/docs/v4-upgrade.md +0 -142
  112. data/docs/webpack-dev-server.md +0 -92
  113. data/docs/webpack.md +0 -364
  114. data/docs/yarn.md +0 -23
  115. data/lib/install/angular.rb +0 -23
  116. data/lib/install/coffee.rb +0 -25
  117. data/lib/install/config/.browserslistrc +0 -1
  118. data/lib/install/config/babel.config.js +0 -70
  119. data/lib/install/config/postcss.config.js +0 -12
  120. data/lib/install/config/webpack/environment.js +0 -3
  121. data/lib/install/elm.rb +0 -39
  122. data/lib/install/erb.rb +0 -25
  123. data/lib/install/examples/angular/hello_angular.js +0 -7
  124. data/lib/install/examples/angular/hello_angular/app/app.component.ts +0 -9
  125. data/lib/install/examples/angular/hello_angular/app/app.module.ts +0 -16
  126. data/lib/install/examples/angular/hello_angular/index.ts +0 -8
  127. data/lib/install/examples/angular/hello_angular/polyfills.ts +0 -73
  128. data/lib/install/examples/coffee/hello_coffee.coffee +0 -4
  129. data/lib/install/examples/elm/Main.elm +0 -55
  130. data/lib/install/examples/elm/hello_elm.js +0 -16
  131. data/lib/install/examples/erb/hello_erb.js.erb +0 -6
  132. data/lib/install/examples/react/babel.config.js +0 -87
  133. data/lib/install/examples/react/hello_react.jsx +0 -26
  134. data/lib/install/examples/react/tsconfig.json +0 -21
  135. data/lib/install/examples/stimulus/application.js +0 -1
  136. data/lib/install/examples/stimulus/controllers/hello_controller.js +0 -18
  137. data/lib/install/examples/stimulus/controllers/index.js +0 -9
  138. data/lib/install/examples/svelte/app.svelte +0 -11
  139. data/lib/install/examples/svelte/hello_svelte.js +0 -20
  140. data/lib/install/examples/typescript/hello_typescript.ts +0 -4
  141. data/lib/install/examples/typescript/tsconfig.json +0 -24
  142. data/lib/install/examples/vue/app.vue +0 -22
  143. data/lib/install/examples/vue/hello_vue.js +0 -72
  144. data/lib/install/loaders/coffee.js +0 -6
  145. data/lib/install/loaders/elm.js +0 -25
  146. data/lib/install/loaders/erb.js +0 -11
  147. data/lib/install/loaders/svelte.js +0 -9
  148. data/lib/install/loaders/vue.js +0 -6
  149. data/lib/install/react.rb +0 -18
  150. data/lib/install/stimulus.rb +0 -12
  151. data/lib/install/svelte.rb +0 -29
  152. data/lib/install/typescript.rb +0 -39
  153. data/lib/install/vue.rb +0 -49
  154. data/lib/tasks/installers.rake +0 -42
  155. data/package/config_types/__tests__/config_list.js +0 -118
  156. data/package/config_types/__tests__/config_object.js +0 -43
  157. data/package/config_types/config_list.js +0 -75
  158. data/package/config_types/config_object.js +0 -55
  159. data/package/config_types/index.js +0 -7
  160. data/package/rules/module.css.js +0 -3
  161. data/package/rules/module.sass.js +0 -8
  162. data/package/rules/node_modules.js +0 -22
  163. data/package/utils/__tests__/deep_assign.js +0 -32
  164. data/package/utils/__tests__/deep_merge.js +0 -10
  165. data/package/utils/__tests__/get_style_rule.js +0 -65
  166. data/package/utils/__tests__/objectify.js +0 -9
  167. data/package/utils/deep_assign.js +0 -22
  168. data/package/utils/deep_merge.js +0 -22
  169. data/package/utils/objectify.js +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8190ac2a707c460f76018576f61a78d1a9f42da441d123619f708a18e3a120b
4
- data.tar.gz: 6311e214c6fa99598a2f530b4950c6c3fbf0ed4cc313d99c16bff9515444adc1
3
+ metadata.gz: fadee7aff74c3363618d5296a2cac880299b70d4d897249176662811ad7565d8
4
+ data.tar.gz: 9f5ab7267a7c1e88e9bf13a285407701e61ed0c15c74eceb5b4453d63ea245e7
5
5
  SHA512:
6
- metadata.gz: c9a5a34f8a7fd156f6e31e6102439c19ce5247600901aab060fde1f929da8a4164379a439a8b67275ece33114a09f1fee3bb8401aede13c7369b51b9cd925a61
7
- data.tar.gz: e05b9e78d6c2b846b3ce3edd311fcca9b883137490a04be9c5cdce8cc5115efb1c5f9bcf8c1fdf6593417047d4ec9669de49975dc75088e449965577c5cedf4a
6
+ metadata.gz: ce8f40137463fb0ac076ab3174a43ee8ab6ef3977e61e6302878827823227f11bd3191438e185d5cd11725e27d79184e40d598fbbbe4d0b2eed1e91bf6f45f36
7
+ data.tar.gz: 8741c6f00b555663a78e714a9930f764350ccf4d8f65809462b8930ce520059ca0f8d77833c9c3c8a0a7f47c6de1920949e9d73dad4400e5afcf4abfa46278e0
@@ -1,5 +1,5 @@
1
1
  module.exports = {
2
- extends: 'airbnb',
2
+ extends: ['airbnb', 'prettier'],
3
3
  rules: {
4
4
  'comma-dangle': ['error', 'never'],
5
5
  'import/no-unresolved': 'off',
@@ -8,7 +8,7 @@ jobs:
8
8
  strategy:
9
9
  matrix:
10
10
  os: [ubuntu-latest]
11
- node: [10.x, 12.x, 14.x]
11
+ node: [10.x, 12.x, 14.x, 15.x]
12
12
 
13
13
  runs-on: ${{ matrix.os }}
14
14
 
@@ -9,7 +9,7 @@ jobs:
9
9
  strategy:
10
10
  matrix:
11
11
  os: [ubuntu-latest]
12
- node: [12.x]
12
+ node: [14.x]
13
13
 
14
14
  runs-on: ${{ matrix.os }}
15
15
 
@@ -18,7 +18,8 @@ jobs:
18
18
  2.4,
19
19
  2.5,
20
20
  2.6,
21
- 2.7
21
+ 2.7,
22
+ 3.0
22
23
  ]
23
24
  gemfile: [
24
25
  "gemfiles/Gemfile-rails.5.2.x",
@@ -27,13 +28,11 @@ jobs:
27
28
  exclude:
28
29
  - ruby: "2.4"
29
30
  gemfile: gemfiles/Gemfile-rails.6.0.x
31
+ - ruby: "3.0"
32
+ gemfile: gemfiles/Gemfile-rails.5.2.x
30
33
  experimental: [false]
31
34
  include:
32
- - ruby: head
33
- os: ubuntu-latest
34
- gemfile: gemfiles/Gemfile-rails.6.0.x
35
- experimental: true
36
- - ruby: head
35
+ - ruby: 2.5
37
36
  os: ubuntu-latest
38
37
  gemfile: gemfiles/Gemfile-rails-edge
39
38
  experimental: true
@@ -45,6 +44,10 @@ jobs:
45
44
  os: ubuntu-latest
46
45
  gemfile: gemfiles/Gemfile-rails-edge
47
46
  experimental: true
47
+ - ruby: 3.0
48
+ os: ubuntu-latest
49
+ gemfile: gemfiles/Gemfile-rails-edge
50
+ experimental: true
48
51
 
49
52
  steps:
50
53
  - uses: actions/checkout@v2
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle
2
2
  /pkg
3
+ /test/mounted_app/test/dummy/log
3
4
  /test/test_app/log
4
5
  node_modules
5
6
  .byebug_history
@@ -9,3 +10,4 @@ yarn-error.log*
9
10
  .yarn-integrity
10
11
  /log
11
12
  gemfiles/*.lock
13
+ .DS_Store
@@ -1 +1 @@
1
- 10.17.0
1
+ 10.22.1
@@ -1,23 +1,18 @@
1
1
  require: rubocop-performance
2
2
  AllCops:
3
- TargetRubyVersion: 2.2
3
+ TargetRubyVersion: 2.4
4
4
  # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
5
5
  # to ignore them, so only the ones explicitly set in this file are enabled.
6
6
  DisabledByDefault: true
7
7
  Exclude:
8
- - 'lib/install/templates/**'
9
- - 'vendor/**/*'
10
- - 'node_modules/**/*'
8
+ - "lib/install/templates/**"
9
+ - "vendor/**/*"
10
+ - "node_modules/**/*"
11
11
 
12
12
  # Prefer &&/|| over and/or.
13
13
  Style/AndOr:
14
14
  Enabled: true
15
15
 
16
- # Do not use braces for hash literals when they are the last argument of a
17
- # method call.
18
- Style/BracesAroundHashParameters:
19
- Enabled: true
20
-
21
16
  # Align `when` with `case`.
22
17
  Layout/CaseIndentation:
23
18
  Enabled: true
@@ -50,7 +45,11 @@ Style/HashSyntax:
50
45
  # extra level of indentation.
51
46
  Layout/IndentationConsistency:
52
47
  Enabled: true
53
- EnforcedStyle: rails
48
+ EnforcedStyle: indented_internal_methods
49
+
50
+ # Detect hard tabs, no hard tabs.
51
+ Layout/IndentationStyle:
52
+ Enabled: true
54
53
 
55
54
  # Two spaces, no tabs (for indentation).
56
55
  Layout/IndentationWidth:
@@ -98,12 +97,8 @@ Style/StringLiterals:
98
97
  Enabled: true
99
98
  EnforcedStyle: double_quotes
100
99
 
101
- # Detect hard tabs, no hard tabs.
102
- Layout/Tab:
103
- Enabled: true
104
-
105
100
  # Blank lines should not have any spaces.
106
- Layout/TrailingBlankLines:
101
+ Layout/TrailingEmptyLines:
107
102
  Enabled: true
108
103
 
109
104
  # No trailing whitespace.
@@ -111,7 +106,7 @@ Layout/TrailingWhitespace:
111
106
  Enabled: true
112
107
 
113
108
  # Use quotes for string literals when they are enough.
114
- Style/UnneededPercentQ:
109
+ Style/RedundantPercentQ:
115
110
  Enabled: true
116
111
 
117
112
  # Align `end` with the matching keyword or starting expression except for
@@ -0,0 +1,48 @@
1
+ # To webpacker v6 from v5
2
+
3
+ This guide aims to help you migrating to webpacker 6. If you are using
4
+ vanilla webpacker install then hopefully, the upgrade should be really
5
+ straightforward.
6
+
7
+ ## Preparation
8
+
9
+ 1. If your `source_path` is `app/javascript`, rename it to `app/packs`
10
+ 2. If your `source_entry_path` is `app/javascript/packs`, rename it to `app/packs/entrypoints`
11
+ 3. Rename `config/webpack` to `config/webpack_old`
12
+ 4. Rename `config/webpacker.yml` to `config/webpacker_old.yml`
13
+ 5. Uninstall the current version of `webpack-dev-server`: `yarn remove webpack-dev-server`
14
+ 6. Upgrade webpacker
15
+
16
+ ```ruby
17
+ # Gemfile
18
+ gem 'webpacker', '~> 6.0.0.pre.2'
19
+ ```
20
+
21
+ ```bash
22
+ bundle install
23
+ ```
24
+
25
+ ```bash
26
+ yarn add @rails/webpacker@next
27
+ ```
28
+
29
+ ```bash
30
+ bundle exec rails webpacker:install
31
+ ```
32
+
33
+ - Change `javascript_pack_tag` and `stylesheet_pack_tag` to `javascript_packs_with_chunks_tag` and
34
+ `stylesheet_packs_with_chunks_tag`
35
+
36
+ 7. If you are using any integrations like `css`, `React` or `TypeScript`. Please see https://github.com/rails/webpacker#integrations section on how they work in v6.0.
37
+
38
+ 8. Copy over any custom webpack config from `config/webpack_old`
39
+
40
+ ```js
41
+ // config/webpack/base.js
42
+ const { webpackConfig, merge } = require('@rails/webpacker')
43
+ const customConfig = require('./custom')
44
+
45
+ module.exports = merge(webpackConfig, customConfig)
46
+ ```
47
+
48
+ 9. Copy over custom browserlist config from `.browserlistrc` if it exists into the `"browserlist"` key in `package.json` and remove `.browserslistrc`.
@@ -2,6 +2,33 @@
2
2
 
3
3
  **Please note that Webpacker 4.1.0 has an installer bug. Please use 4.2.0 or above**
4
4
 
5
+ ## [[6.0.0]](https://github.com/rails/webpacker/compare/v5.1.1...master) - 2021-TBD
6
+
7
+ - `node_modules` will no longer be compiled by default. This primarily fixes [rails issue #35501](https://github.com/rails/rails/issues/35501) as well as [numerous other webpacker issues](https://github.com/rails/webpacker/issues/2131#issuecomment-581618497). The disabled loader can still be required explicitly via:
8
+
9
+ ```js
10
+ const nodeModules = require('@rails/webpacker/rules/node_modules.js')
11
+ environment.loaders.append('nodeModules', nodeModules)
12
+ ```
13
+
14
+ - If you have added `environment.loaders.delete('nodeModules')` to your `environment.js`, this must be removed or you will receive an error (`Item nodeModules not found`).
15
+ - The install task will now set the `extract_css` default to `true` in all environments and generate a separate `application.css` file for the default `application` pack, as supported by multiple files per entry introduced in 5.0.0. [#2608](https://github.com/rails/webpacker/pull/2608)
16
+ - Webpacker's wrapper to the `splitChunks()` API will now default `runtimeChunk: 'single'` which will help prevent potential issues when using multiple entry points per page [#2708](https://github.com/rails/webpacker/pull/2708).
17
+ - Changes `@babel/preset-env` modules option to `'auto'` per recommendation in the Babel docs [#2709](https://github.com/rails/webpacker/pull/2709)
18
+ - Adds experimental Yarn 2 support. Note you must manually set `nodeLinker: node-modules` in your `.yarnrc.yml`.
19
+
20
+ - Fixes dev server issues [#2898](https://github.com/rails/webpacker/pull/2898)
21
+
22
+ ### Breaking changes
23
+
24
+ - Simple webpack config
25
+ - Removed integration installers
26
+ - Splitchunks enabled by default
27
+ - CSS extraction enabled by default
28
+ - Optional CSS support
29
+
30
+ Please see upgrade [guide](./6_0_upgrade.md)
31
+
5
32
  ## [[5.2.1]](https://github.com/rails/webpacker/compare/v5.2.0...5.2.1) - 2020-08-17
6
33
 
7
34
  - Revert [#1311](https://github.com/rails/webpacker/pull/1311).
@@ -9,7 +9,7 @@ yarn
9
9
  ```
10
10
 
11
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.
12
+ There are a number of automated checks which run on GitHub Actions when a pull request is created.
13
13
  You can run those checks on your own locally to make sure that your changes would not break the CI build.
14
14
 
15
15
  ### 1. Check the code for JavaScript style violations
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webpacker (5.2.1)
4
+ webpacker (6.0.0.beta.4)
5
5
  activesupport (>= 5.2)
6
6
  rack-proxy (>= 0.6.1)
7
7
  railties (>= 5.2)
@@ -75,7 +75,6 @@ GEM
75
75
  activesupport (>= 4.2.0)
76
76
  i18n (1.8.5)
77
77
  concurrent-ruby (~> 1.0)
78
- jaro_winkler (1.5.4)
79
78
  loofah (2.6.0)
80
79
  crass (~> 1.0.2)
81
80
  nokogiri (>= 1.5.9)
@@ -86,14 +85,16 @@ GEM
86
85
  method_source (1.0.0)
87
86
  mimemagic (0.3.5)
88
87
  mini_mime (1.0.2)
89
- mini_portile2 (2.4.0)
90
- minitest (5.14.1)
88
+ mini_portile2 (2.5.0)
89
+ minitest (5.14.3)
91
90
  nio4r (2.5.2)
92
- nokogiri (1.10.10)
93
- mini_portile2 (~> 2.4.0)
91
+ nokogiri (1.11.1)
92
+ mini_portile2 (~> 2.5.0)
93
+ racc (~> 1.4)
94
94
  parallel (1.19.2)
95
- parser (2.7.1.4)
95
+ parser (2.7.2.0)
96
96
  ast (~> 2.4.1)
97
+ racc (1.5.2)
97
98
  rack (2.2.3)
98
99
  rack-proxy (0.6.5)
99
100
  rack
@@ -127,15 +128,22 @@ GEM
127
128
  thor (>= 0.20.3, < 2.0)
128
129
  rainbow (3.0.0)
129
130
  rake (13.0.1)
130
- rubocop (0.68.1)
131
- jaro_winkler (~> 1.5.1)
131
+ regexp_parser (1.8.2)
132
+ rexml (3.2.4)
133
+ rubocop (0.93.1)
132
134
  parallel (~> 1.10)
133
- parser (>= 2.5, != 2.5.1.1)
135
+ parser (>= 2.7.1.5)
134
136
  rainbow (>= 2.2.2, < 4.0)
137
+ regexp_parser (>= 1.8)
138
+ rexml
139
+ rubocop-ast (>= 0.6.0)
135
140
  ruby-progressbar (~> 1.7)
136
- unicode-display_width (>= 1.4.0, < 1.6)
137
- rubocop-performance (1.3.0)
138
- rubocop (>= 0.68.0)
141
+ unicode-display_width (>= 1.4.0, < 2.0)
142
+ rubocop-ast (0.8.0)
143
+ parser (>= 2.7.1.5)
144
+ rubocop-performance (1.8.1)
145
+ rubocop (>= 0.87.0)
146
+ rubocop-ast (>= 0.4.0)
139
147
  ruby-progressbar (1.10.1)
140
148
  semantic_range (2.3.0)
141
149
  sprockets (4.0.2)
@@ -149,7 +157,7 @@ GEM
149
157
  thread_safe (0.3.6)
150
158
  tzinfo (1.2.7)
151
159
  thread_safe (~> 0.1)
152
- unicode-display_width (1.5.0)
160
+ unicode-display_width (1.7.0)
153
161
  websocket-driver (0.7.3)
154
162
  websocket-extensions (>= 0.1.0)
155
163
  websocket-extensions (0.1.5)
@@ -165,7 +173,7 @@ DEPENDENCIES
165
173
  rack-proxy
166
174
  rails
167
175
  rake (>= 11.1)
168
- rubocop (< 0.69)
176
+ rubocop (= 0.93.1)
169
177
  rubocop-performance
170
178
  semantic_range
171
179
  webpacker!
data/README.md CHANGED
@@ -1,11 +1,15 @@
1
1
  # Webpacker
2
2
 
3
- [![Build Status](https://travis-ci.org/rails/webpacker.svg?branch=master)](https://travis-ci.org/rails/webpacker)
3
+ [![Ruby specs](https://github.com/rails/webpacker/workflows/Ruby%20specs/badge.svg)](https://github.com/rails/webpacker/actions)
4
+ [![Jest specs](https://github.com/rails/webpacker/workflows/Jest%20specs/badge.svg)](https://github.com/rails/webpacker/actions)
5
+ [![Rubocop](https://github.com/rails/webpacker/workflows/Rubocop/badge.svg)](https://github.com/rails/webpacker/actions)
6
+ [![JS lint](https://github.com/rails/webpacker/workflows/JS%20lint/badge.svg)](https://github.com/rails/webpacker/actions)
7
+
4
8
  [![node.js](https://img.shields.io/badge/node-%3E%3D%2010.17.0-brightgreen.svg)](https://www.npmjs.com/package/@rails/webpacker)
5
9
  [![Gem](https://img.shields.io/gem/v/webpacker.svg)](https://rubygems.org/gems/webpacker)
6
10
 
7
11
  Webpacker makes it easy to use the JavaScript pre-processor and bundler
8
- [webpack 4.x.x+](https://webpack.js.org/)
12
+ [webpack 5.x.x+](https://webpack.js.org/)
9
13
  to manage application-like JavaScript in Rails. It coexists with the asset pipeline,
10
14
  as the primary purpose for webpack is app-like JavaScript, not images, CSS, or
11
15
  even JavaScript Sprinkles (that all continues to live in app/assets).
@@ -13,7 +17,7 @@ even JavaScript Sprinkles (that all continues to live in app/assets).
13
17
  However, it is possible to use Webpacker for CSS, images and fonts assets as well,
14
18
  in which case you may not even need the asset pipeline. This is mostly relevant when exclusively using component-based JavaScript frameworks.
15
19
 
16
- **NOTE:** The master branch now hosts the code for v5.x.x. Please refer to [4-x-stable](https://github.com/rails/webpacker/tree/4-x-stable) branch for 4.x documentation.
20
+ **NOTE:** The master branch now hosts the code for v6.x.x. Please refer to [5-x-stable](https://github.com/rails/webpacker/tree/5-x-stable) branch for 5.x documentation.
17
21
 
18
22
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
19
23
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
@@ -28,16 +32,6 @@ in which case you may not even need the asset pipeline. This is mostly relevant
28
32
  - [Webpack Configuration](#webpack-configuration)
29
33
  - [Custom Rails environments](#custom-rails-environments)
30
34
  - [Upgrading](#upgrading)
31
- - [Integrations](#integrations)
32
- - [React](./docs/integrations.md#react)
33
- - [Angular with TypeScript](./docs/integrations.md#angular-with-typescript)
34
- - [Vue](./docs/integrations.md#vue)
35
- - [Elm](./docs/integrations.md#elm)
36
- - [Stimulus](./docs/integrations.md#stimulus)
37
- - [Svelte](./docs/integrations.md#svelte)
38
- - [Typescript](./docs/typescript.md)
39
- - [CoffeeScript](./docs/integrations.md#coffeescript)
40
- - [Erb](./docs/integrations.md#erb)
41
35
  - [Paths](#paths)
42
36
  - [Resolved](#resolved)
43
37
  - [Watched](#watched)
@@ -52,23 +46,28 @@ in which case you may not even need the asset pipeline. This is mostly relevant
52
46
 
53
47
  - Ruby 2.4+
54
48
  - Rails 5.2+
55
- - Node.js 10.17.0+
49
+ - Node.js 10.22.1+ || 12+ || 14+
56
50
  - Yarn 1.x+
57
51
 
58
52
  ## Features
59
53
 
60
- - [webpack 4.x.x](https://webpack.js.org/)
54
+ - [webpack 5.x.x](https://webpack.js.org/)
61
55
  - ES6 with [babel](https://babeljs.io/)
62
56
  - Automatic code splitting using multiple entry points
63
- - Stylesheets - Sass and CSS
64
- - Images and fonts
65
- - PostCSS - Auto-Prefixer
66
57
  - Asset compression, source-maps, and minification
67
58
  - CDN support
68
- - React, Angular, Elm and Vue support out-of-the-box
69
59
  - Rails view helpers
70
60
  - Extensible and configurable
71
61
 
62
+ ### Optional support\*
63
+
64
+ _requires extra packages to be installed_
65
+
66
+ - Stylesheets - Sass, Less, Stylus and Css, PostCSS
67
+ - CoffeeScript
68
+ - TypeScript
69
+ - React
70
+
72
71
  ## Installation
73
72
 
74
73
  You can either add Webpacker during setup of a new Rails 5.1+ application
@@ -83,12 +82,11 @@ Or add it to your `Gemfile`:
83
82
 
84
83
  ```ruby
85
84
  # Gemfile
86
- gem 'webpacker', '~> 5.x'
85
+ gem 'webpacker', '~> 6.x'
87
86
 
88
87
  # OR if you prefer to use master
89
88
  gem 'webpacker', git: 'https://github.com/rails/webpacker.git'
90
89
  yarn add https://github.com/rails/webpacker.git
91
- yarn add core-js regenerator-runtime
92
90
  ```
93
91
 
94
92
  Finally, run the following to install Webpacker:
@@ -118,9 +116,9 @@ yarn install
118
116
  Once installed, you can start writing modern ES6-flavored JavaScript apps right away:
119
117
 
120
118
  ```yml
121
- app/javascript:
122
- ├── packs:
123
- │ # only webpack entry files here
119
+ app/packs:
120
+ ├── entrypoints:
121
+ │ # Only webpack entry files here
124
122
  │ └── application.js
125
123
  │ └── application.css
126
124
  └── src:
@@ -131,56 +129,44 @@ app/javascript:
131
129
  └── logo.svg
132
130
  ```
133
131
 
134
- In `/packs/application.js`, include this at the top of the file:
135
-
136
- ```js
137
- import 'core-js/stable'
138
- import 'regenerator-runtime/runtime'
139
- ```
140
-
141
- You can then link the JavaScript pack in Rails views using the `javascript_pack_tag` helper.
142
- If you have styles imported in your pack file, you can link them by using `stylesheet_pack_tag`:
132
+ You can then link the JavaScript pack in Rails views using the `javascript_packs_with_chunks_tag` helper. If you have styles imported in your pack file, you can link them by using `stylesheet_packs_with_chunks_tag`:
143
133
 
144
134
  ```erb
145
- <%= javascript_pack_tag 'application' %>
146
- <%= stylesheet_pack_tag 'application' %>
135
+ <%= javascript_packs_with_chunks_tag 'application' %>
136
+ <%= stylesheet_packs_with_chunks_tag 'application' %>
147
137
  ```
148
138
 
149
- If you want to link a static asset for `<link rel="prefetch">` or `<img />` tag, you
150
- can use the `asset_pack_path` helper:
151
-
139
+ If you want to link a static asset for `<img />` tag, you can use the `asset_pack_path` helper:
152
140
  ```erb
153
- <link rel="prefetch" href="<%= asset_pack_path 'application.css' %>" />
154
141
  <img src="<%= asset_pack_path 'images/logo.svg' %>" />
155
142
  ```
156
143
 
157
- If you are using new webpack 4 split chunks API, then consider using `javascript_packs_with_chunks_tag` helper, which creates html
158
- tags for a pack and all the dependent chunks.
159
-
144
+ Or use the dedicated helper:
160
145
  ```erb
161
- <%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
162
-
163
- <script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
164
- <script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
165
- <script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
166
- <script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
167
- <script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
146
+ <%= image_pack_tag 'application.png', size: '16x10', alt: 'Edit Entry' %>
147
+ <%= image_pack_tag 'picture.png', srcset: { 'picture-2x.png' => '2x' } %>
168
148
  ```
169
149
 
170
- **Important:** Pass all your pack names when using `javascript_packs_with_chunks_tag`
171
- helper otherwise you will get duplicated chunks on the page.
150
+ If you want to create a favicon:
151
+ ```erb
152
+ <%= favicon_pack_tag 'mb-icon.png', rel: 'apple-touch-icon', type: 'image/png' %>
153
+ ```
172
154
 
155
+ If you want to preload a static asset in your `<head>`, you can use the `preload_pack_asset` helper:
173
156
  ```erb
174
- <%# DO %>
175
- <%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
157
+ <%= preload_pack_asset 'fonts/fa-regular-400.woff2' %>
158
+ ```
159
+
160
+ If you want to use images in your stylesheets:
176
161
 
177
- <%# DON'T %>
178
- <%= javascript_packs_with_chunks_tag 'calendar' %>
179
- <%= javascript_packs_with_chunks_tag 'map' %>
162
+ ```css
163
+ .foo {
164
+ background-image: url('../images/logo.svg')
165
+ }
180
166
  ```
181
167
 
182
168
  **Note:** In order for your styles or static assets files to be available in your view,
183
- you would need to link them in your "pack" or entry file.
169
+ you would need to link them in your `pack` or entry file.
184
170
 
185
171
  ### Development
186
172
 
@@ -196,7 +182,7 @@ to the standard Rails log.
196
182
 
197
183
  If you want to use live code reloading, or you have enough JavaScript that on-demand compilation is too slow, you'll need to run `./bin/webpack-dev-server` or `ruby ./bin/webpack-dev-server`. Windows users will need to run these commands
198
184
  in a terminal separate from `bundle exec rails s`. This process will watch for changes
199
- in the `app/javascript/packs/*.js` files and automatically reload the browser to match.
185
+ in the `app/packs/entrypoints/*.js` files and automatically reload the browser to match.
200
186
 
201
187
  ```bash
202
188
  # webpack dev server
@@ -244,7 +230,208 @@ WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpack-dev-server
244
230
 
245
231
  ### Webpack Configuration
246
232
 
247
- See [docs/webpack](docs/webpack.md) for modifying webpack configuration and loaders.
233
+ Webpacker gives you a default set of configuration files for test, development and
234
+ production environments in `config/webpack/*.js`. You can configure each individual
235
+ environment in their respective files or configure them all in the base
236
+ `config/webpack/base.js` file.
237
+
238
+ By default, you don't need to make any changes to `config/webpack/*.js`
239
+ files since it's all standard production-ready configuration. However,
240
+ if you do need to customize or add a new loader, this is where you would go.
241
+
242
+ Here is how you can modify webpack configuration:
243
+
244
+ You might add separate files to keep your code more organized.
245
+
246
+ ```js
247
+ // config/webpack/custom.js
248
+ module.exports = {
249
+ resolve: {
250
+ alias: {
251
+ jquery: 'jquery/src/jquery',
252
+ vue: 'vue/dist/vue.js',
253
+ React: 'react',
254
+ ReactDOM: 'react-dom',
255
+ vue_resource: 'vue-resource/dist/vue-resource'
256
+ }
257
+ }
258
+ }
259
+ ```
260
+
261
+ Then `require` this file in your `config/webpack/base.js`:
262
+
263
+ ```js
264
+ // config/webpack/base.js
265
+ const { webpackConfig, merge } = require('@rails/webpacker')
266
+ const customConfig = require('./custom')
267
+
268
+ module.exports = merge(webpackConfig, customConfig)
269
+ ```
270
+
271
+ If you need access to configs within Webpacker's configuration,
272
+ you can import them like so:
273
+
274
+ ```js
275
+ // config/webpack/base.js
276
+ const { webpackConfig } = require('@rails/webpacker')
277
+
278
+ console.log(webpackConfig.output_path)
279
+ console.log(webpackConfig.source_path)
280
+ ```
281
+
282
+ ### Integrations
283
+
284
+ Webpacker out of the box supports JS and static assets (fonts, images etc.)
285
+ compilation. To enable support for CoffeeScript or TypeScript install
286
+ relevant packages,
287
+
288
+ #### CoffeeScript
289
+
290
+ ```bash
291
+ yarn add coffeescript coffee-loader
292
+ ```
293
+
294
+ #### TypeScript
295
+
296
+ ```bash
297
+ yarn add typescript @babel/preset-typescript
298
+ ```
299
+
300
+ Add tsconfig.json
301
+
302
+ ```json
303
+ {
304
+ "compilerOptions": {
305
+ "declaration": false,
306
+ "emitDecoratorMetadata": true,
307
+ "experimentalDecorators": true,
308
+ "lib": ["es6", "dom"],
309
+ "module": "es6",
310
+ "moduleResolution": "node",
311
+ "baseUrl": ".",
312
+ "paths": {
313
+ "*": ["node_modules/*", "app/packs/*"]
314
+ },
315
+ "sourceMap": true,
316
+ "target": "es5",
317
+ "noEmit": true
318
+ },
319
+ "exclude": ["**/*.spec.ts", "node_modules", "vendor", "public"],
320
+ "compileOnSave": false
321
+ }
322
+ ```
323
+
324
+ #### CSS
325
+
326
+ To enable CSS support in your application, add following packages,
327
+
328
+ ```bash
329
+ yarn add css-loader mini-css-extract-plugin css-minimizer-webpack-plugin
330
+ ```
331
+
332
+ optionally, add css extension to webpack config for easy resolution
333
+
334
+ ```js
335
+ // config/webpack/base.js
336
+ const { webpackConfig, merge } = require('@rails/webpacker')
337
+ const customConfig = {
338
+ resolve: {
339
+ extensions: ['.css']
340
+ }
341
+ }
342
+
343
+ module.exports = merge(webpackConfig, customConfig)
344
+ ```
345
+
346
+ To enable postcss, sass or less support, add css support first and
347
+ then add the relevant pre-processors:
348
+
349
+ #### Postcss
350
+
351
+ ```bash
352
+ yarn add postcss-loader
353
+ ```
354
+
355
+ #### Sass
356
+
357
+ ```bash
358
+ yarn add sass sass-loader
359
+ ```
360
+
361
+ #### Less
362
+
363
+ ```bash
364
+ yarn add less less-loader
365
+ ```
366
+
367
+ #### Stylus
368
+
369
+ ```bash
370
+ yarn add stylus stylus-loader
371
+ ```
372
+
373
+ #### React
374
+
375
+ React is supported and you just need to add relevant packages,
376
+
377
+ ```bash
378
+ yarn add react react-dom @babel/preset-react
379
+ ```
380
+
381
+ if you are using typescript, update your `tsconfig.json`
382
+
383
+ ```json
384
+ {
385
+ "compilerOptions": {
386
+ "declaration": false,
387
+ "emitDecoratorMetadata": true,
388
+ "experimentalDecorators": true,
389
+ "lib": ["es6", "dom"],
390
+ "module": "es6",
391
+ "moduleResolution": "node",
392
+ "sourceMap": true,
393
+ "target": "es5",
394
+ "jsx": "react",
395
+ "noEmit": true
396
+ },
397
+ "exclude": ["**/*.spec.ts", "node_modules", "vendor", "public"],
398
+ "compileOnSave": false
399
+ }
400
+ ```
401
+
402
+ #### Other frameworks
403
+
404
+ Please follow webpack integration guide for relevant framework or library,
405
+
406
+ 1. [Svelte](https://github.com/sveltejs/svelte-loader#install)
407
+ 2. [Angular](https://v2.angular.io/docs/ts/latest/guide/webpack.html#!#configure-webpack)
408
+ 3. [Vue](https://vue-loader.vuejs.org/guide/)
409
+
410
+ For example to add Vue support:
411
+ ```js
412
+ // config/webpack/rules/vue.js
413
+ const VueLoaderPlugin = require('vue-loader/lib/plugin')
414
+
415
+ module.exports = {
416
+ module: {
417
+ rules: [
418
+ {
419
+ test: /\.vue$/,
420
+ loader: 'vue-loader'
421
+ }
422
+ ]
423
+ },
424
+ plugins: [new VueLoaderPlugin()]
425
+ }
426
+ ```
427
+
428
+ ```js
429
+ // config/webpack/base.js
430
+ const { webpackConfig, merge } = require('@rails/webpacker')
431
+ const vueConfig = require('./rules/vue')
432
+
433
+ module.exports = merge(webpackConfig, vueConfig)
434
+ ```
248
435
 
249
436
  ### Custom Rails environments
250
437
 
@@ -301,7 +488,7 @@ You can run following commands to upgrade Webpacker to the latest stable version
301
488
 
302
489
  ```bash
303
490
  bundle update webpacker
304
- rails webpacker:binstubs
491
+ rails webpacker:install
305
492
  yarn upgrade @rails/webpacker --latest
306
493
  yarn upgrade webpack-dev-server --latest
307
494
 
@@ -309,24 +496,6 @@ yarn upgrade webpack-dev-server --latest
309
496
  yarn add @rails/webpacker@next
310
497
  ```
311
498
 
312
- ## Integrations
313
-
314
- Webpacker ships with basic out-of-the-box integration. You can see a list of available commands/tasks by running `bundle exec rails webpacker`.
315
-
316
- Included install integrations:
317
-
318
- - [React](./docs/integrations.md#React)
319
- - [Angular with TypeScript](./docs/integrations.md#Angular-with-TypeScript)
320
- - [Vue](./docs/integrations.md#Vue)
321
- - [Elm](./docs/integrations.md#Elm)
322
- - [Svelte](./docs/integrations.md#Svelte)
323
- - [Stimulus](./docs/integrations.md#Stimulus)
324
- - [CoffeeScript](./docs/integrations.md#CoffeeScript)
325
- - [Typescript](./docs/typescript.md)
326
- - [Erb](./docs/integrations.md#Erb)
327
-
328
- See [Integrations](./docs/integrations.md) for further details.
329
-
330
499
  ## Paths
331
500
 
332
501
  By default, Webpacker ships with simple conventions for where the JavaScript
@@ -334,13 +503,13 @@ app files and compiled webpack bundles will go in your Rails app.
334
503
  All these options are configurable from `config/webpacker.yml` file.
335
504
 
336
505
  The configuration for what webpack is supposed to compile by default rests
337
- on the convention that every file in `app/javascript/packs/*`**(default)**
506
+ on the convention that every file in `app/packs/entrypoints/*`**(default)**
338
507
  or whatever path you set for `source_entry_path` in the `webpacker.yml` configuration
339
508
  is turned into their own output files (or entry points, as webpack calls it). Therefore you don't want to put anything inside `packs` directory that you do not want to be
340
509
  an entry file. As a rule of thumb, put all files you want to link in your views inside
341
- "packs" directory and keep everything else under `app/javascript`.
510
+ "packs" directory and keep everything else under `app/packs`.
342
511
 
343
- Suppose you want to change the source directory from `app/javascript`
512
+ Suppose you want to change the source directory from `app/packs`
344
513
  to `frontend` and output to `assets/packs`. This is how you would do it:
345
514
 
346
515
  ```yml
@@ -362,7 +531,7 @@ development:
362
531
 
363
532
  If you have `hmr` turned to true, then the `stylesheet_pack_tag` generates no output, as you will want to configure your styles to be inlined in your JavaScript for hot reloading. During production and testing, the `stylesheet_pack_tag` will create the appropriate HTML tags.
364
533
 
365
- ### Resolved
534
+ ### Additional paths
366
535
 
367
536
  If you are adding Webpacker to an existing app that has most of the assets inside
368
537
  `app/assets` or inside an engine, and you want to share that
@@ -371,7 +540,7 @@ option available in `config/webpacker.yml`. This lets you
371
540
  add additional paths that webpack should lookup when resolving modules:
372
541
 
373
542
  ```yml
374
- additional_paths: ['app/assets']
543
+ additional_paths: ['app/assets/**/*', 'vendor/assets/**/*.css', 'Gemfile']
375
544
  ```
376
545
 
377
546
  You can then import these items inside your modules like so:
@@ -392,26 +561,6 @@ Webpacker hooks up a new `webpacker:compile` task to `assets:precompile`, which
392
561
 
393
562
  When compiling assets for production on a remote server, such as a continuous integration environment, it's recommended to use `yarn install --frozen-lockfile` to install NPM packages on the remote host to ensure that the installed packages match the `yarn.lock` file.
394
563
 
395
- ## Docs
396
-
397
- - [Development](https://github.com/rails/webpacker#development)
398
- - [Webpack](./docs/webpack.md)
399
- - [Webpack-dev-server](./docs/webpack-dev-server.md)
400
- - [Environment Variables](./docs/env.md)
401
- - [Folder Structure](./docs/folder-structure.md)
402
- - [Assets](./docs/assets.md) - [CSS, Sass and SCSS](./docs/css.md) - [ES6](./docs/es6.md), [Target browsers](./docs/target.md)
403
- - [Props](./docs/props.md)
404
- - [Typescript](./docs/typescript.md)
405
- - [Yarn](./docs/yarn.md)
406
- - [Misc](./docs/misc.md)
407
- - [Deployment](./docs/deployment.md)
408
- - [Docker](./docs/docker.md)
409
- - [Using in Rails engines](./docs/engines.md)
410
- - [Webpacker on Cloud9](./docs/cloud9.md)
411
- - [Testing](./docs/testing.md)
412
- - [Troubleshooting](./docs/troubleshooting.md)
413
- - [v3 to v4 Upgrade Guide](./docs/v4-upgrade.md)
414
-
415
564
  ## Contributing
416
565
 
417
566
  [![Code Helpers](https://www.codetriage.com/rails/webpacker/badges/users.svg)](https://www.codetriage.com/rails/webpacker)