webpacker 6.0.0.beta.1 → 6.0.0.beta.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/jest.yml +1 -1
- data/.github/workflows/js-lint.yml +1 -1
- data/.github/workflows/ruby.yml +9 -6
- data/6_0_upgrade.md +29 -10
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +1 -1
- data/Gemfile.lock +7 -5
- data/README.md +134 -54
- data/config/README.md +3 -0
- data/config/webpacker.yml +1 -0
- data/docs/troubleshooting.md +160 -0
- data/lib/install/config/webpacker.yml +4 -2
- data/lib/install/{javascript/packs → packs/entrypoints}/application.js +1 -1
- data/lib/install/template.rb +3 -3
- data/lib/webpacker/commands.rb +2 -1
- data/lib/webpacker/compiler.rb +2 -2
- data/lib/webpacker/dev_server_runner.rb +2 -0
- data/lib/webpacker/helper.rb +13 -43
- data/lib/webpacker/manifest.rb +1 -1
- data/lib/webpacker/version.rb +1 -1
- data/lib/webpacker/webpack_runner.rb +1 -0
- data/package.json +1 -1
- data/package/__tests__/development.js +2 -1
- data/package/__tests__/index.js +9 -0
- data/package/environments/__tests__/base.js +6 -6
- data/package/environments/base.js +7 -4
- data/package/environments/development.js +1 -0
- data/package/environments/production.js +29 -22
- data/package/index.js +3 -3
- data/package/rules/babel.js +1 -1
- data/package/rules/file.js +6 -2
- data/package/rules/index.js +2 -2
- data/package/rules/stylus.js +26 -0
- data/package/utils/helpers.js +4 -2
- data/test/configuration_test.rb +2 -2
- data/test/dev_server_runner_test.rb +10 -2
- data/test/helper_test.rb +33 -39
- data/test/manifest_test.rb +8 -0
- data/test/mounted_app/test/dummy/config/webpacker.yml +2 -2
- data/test/test_app/app/{javascript/packs → packs/entrypoints}/application.js +1 -1
- data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.css +0 -0
- data/test/test_app/app/{javascript/packs → packs/entrypoints}/multi_entry.js +0 -0
- data/test/test_app/config/webpacker.yml +2 -2
- data/test/test_app/public/packs/manifest.json +7 -0
- metadata +16 -13
- data/lib/install/javascript/packs/application.css +0 -9
- data/package/rules/svg.js +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e389b1e654d5e3b6e50adb6a908c94cb1039e978b119f32c49c07813f0733ca
|
4
|
+
data.tar.gz: 4843befc313e31f85996e36ce59c994f8c3842e82034da51872a2a4f8cb0e5d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8238ffb0c0b369bbffdf26766a237ca9ab059989aa79c9fa752fe8f217a79ee2985d00ec52861b7320fe2a5610d5df48941ddb597995bf95c846b381a3f7544d
|
7
|
+
data.tar.gz: ce30d8500790565854a174e2ab67598a4fa7ff90eb67a226fb182861baba8d4bb7446958c0457c9b22aedaf345438f69f6542f52a672a6fa2204882220d5d277
|
data/.github/workflows/jest.yml
CHANGED
data/.github/workflows/ruby.yml
CHANGED
@@ -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:
|
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/6_0_upgrade.md
CHANGED
@@ -6,17 +6,20 @@ straightforward.
|
|
6
6
|
|
7
7
|
## Preparation
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
1. If your `source_path` is `app/javascript`, rename it to `app/packs`
|
10
|
+
2. If your `source_entry_path` is `packs`, rename it to `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
|
12
15
|
|
13
16
|
```ruby
|
14
17
|
# Gemfile
|
15
|
-
gem 'webpacker', '~> 6.
|
18
|
+
gem 'webpacker', '~> 6.0.0.pre.2'
|
16
19
|
```
|
17
20
|
|
18
|
-
```
|
19
|
-
bundle
|
21
|
+
```bash
|
22
|
+
bundle install
|
20
23
|
```
|
21
24
|
|
22
25
|
```bash
|
@@ -27,12 +30,15 @@ straightforward.
|
|
27
30
|
bundle exec rails webpacker:install
|
28
31
|
```
|
29
32
|
|
30
|
-
- Change `
|
31
|
-
`
|
33
|
+
- Change `javascript_packs_with_chunks_tag` and `stylesheet_packs_with_chunks_tag` to `javascript_pack_tag` and
|
34
|
+
`stylesheet_pack_tag`.
|
32
35
|
|
33
|
-
|
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.
|
34
37
|
|
35
|
-
|
38
|
+
8. Copy over any custom webpack config from `config/webpack_old`
|
39
|
+
|
40
|
+
- Common code previously called 'environment' changed to 'base'
|
41
|
+
- import `environment` changed name to `webpackConfig`.
|
36
42
|
|
37
43
|
```js
|
38
44
|
// config/webpack/base.js
|
@@ -41,3 +47,16 @@ straightforward.
|
|
41
47
|
|
42
48
|
module.exports = merge(webpackConfig, customConfig)
|
43
49
|
```
|
50
|
+
|
51
|
+
9. Copy over custom browserlist config from `.browserlistrc` if it exists into the `"browserlist"` key in `package.json` and remove `.browserslistrc`.
|
52
|
+
|
53
|
+
10. `extensions` was removed from the webpacker.yml file. Move custom extensions to
|
54
|
+
your configuration by by merging an object like this. For more details, see docs for
|
55
|
+
[Webpack Configuration](https://github.com/rails/webpacker/blob/master/README.md#webpack-configuration)
|
56
|
+
```js
|
57
|
+
{
|
58
|
+
resolve: {
|
59
|
+
extensions: ['.ts', '.tsx']
|
60
|
+
}
|
61
|
+
}
|
62
|
+
```
|
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,8 @@ environment.loaders.append('nodeModules', nodeModules)
|
|
17
17
|
- Changes `@babel/preset-env` modules option to `'auto'` per recommendation in the Babel docs [#2709](https://github.com/rails/webpacker/pull/2709)
|
18
18
|
- Adds experimental Yarn 2 support. Note you must manually set `nodeLinker: node-modules` in your `.yarnrc.yml`.
|
19
19
|
|
20
|
+
- Fixes dev server issues [#2898](https://github.com/rails/webpacker/pull/2898)
|
21
|
+
|
20
22
|
### Breaking changes
|
21
23
|
|
22
24
|
- Simple webpack config
|
data/CONTRIBUTING.md
CHANGED
@@ -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
|
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
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
webpacker (6.0.0.beta.
|
4
|
+
webpacker (6.0.0.beta.6)
|
5
5
|
activesupport (>= 5.2)
|
6
6
|
rack-proxy (>= 0.6.1)
|
7
7
|
railties (>= 5.2)
|
@@ -85,14 +85,16 @@ GEM
|
|
85
85
|
method_source (1.0.0)
|
86
86
|
mimemagic (0.3.5)
|
87
87
|
mini_mime (1.0.2)
|
88
|
-
mini_portile2 (2.
|
89
|
-
minitest (5.14.
|
88
|
+
mini_portile2 (2.5.0)
|
89
|
+
minitest (5.14.3)
|
90
90
|
nio4r (2.5.2)
|
91
|
-
nokogiri (1.
|
92
|
-
mini_portile2 (~> 2.
|
91
|
+
nokogiri (1.11.1)
|
92
|
+
mini_portile2 (~> 2.5.0)
|
93
|
+
racc (~> 1.4)
|
93
94
|
parallel (1.19.2)
|
94
95
|
parser (2.7.2.0)
|
95
96
|
ast (~> 2.4.1)
|
97
|
+
racc (1.5.2)
|
96
98
|
rack (2.2.3)
|
97
99
|
rack-proxy (0.6.5)
|
98
100
|
rack
|
data/README.md
CHANGED
@@ -36,7 +36,6 @@ in which case you may not even need the asset pipeline. This is mostly relevant
|
|
36
36
|
- [Resolved](#resolved)
|
37
37
|
- [Watched](#watched)
|
38
38
|
- [Deployment](#deployment)
|
39
|
-
- [Docs](#docs)
|
40
39
|
- [Contributing](#contributing)
|
41
40
|
- [License](#license)
|
42
41
|
|
@@ -59,13 +58,13 @@ in which case you may not even need the asset pipeline. This is mostly relevant
|
|
59
58
|
- Rails view helpers
|
60
59
|
- Extensible and configurable
|
61
60
|
|
62
|
-
|
61
|
+
### Optional support
|
63
62
|
|
64
63
|
_requires extra packages to be installed_
|
65
64
|
|
66
|
-
- Stylesheets -
|
67
|
-
-
|
68
|
-
-
|
65
|
+
- Stylesheets - Sass, Less, Stylus and Css, PostCSS
|
66
|
+
- CoffeeScript
|
67
|
+
- TypeScript
|
69
68
|
- React
|
70
69
|
|
71
70
|
## Installation
|
@@ -108,7 +107,8 @@ yarn upgrade
|
|
108
107
|
When `package.json` and/or `yarn.lock` changes, such as when pulling down changes to your local environment in a team settings, be sure to keep your NPM packages up-to-date:
|
109
108
|
|
110
109
|
```bash
|
111
|
-
yarn install
|
110
|
+
# default for `yarn` is to install
|
111
|
+
yarn
|
112
112
|
```
|
113
113
|
|
114
114
|
### Usage
|
@@ -116,9 +116,9 @@ yarn install
|
|
116
116
|
Once installed, you can start writing modern ES6-flavored JavaScript apps right away:
|
117
117
|
|
118
118
|
```yml
|
119
|
-
app/
|
120
|
-
├──
|
121
|
-
│ #
|
119
|
+
app/packs:
|
120
|
+
├── entrypoints:
|
121
|
+
│ # Only webpack entry files here
|
122
122
|
│ └── application.js
|
123
123
|
│ └── application.css
|
124
124
|
└── src:
|
@@ -129,23 +129,50 @@ app/javascript:
|
|
129
129
|
└── logo.svg
|
130
130
|
```
|
131
131
|
|
132
|
-
You can then link the JavaScript pack in Rails views using the `
|
132
|
+
You can then link the JavaScript pack in Rails views using the `javascript_pack_tag` helper. If you have styles imported in your pack file, you can link them by using `stylesheet_pack_tag`:
|
133
133
|
|
134
134
|
```erb
|
135
|
-
<%=
|
136
|
-
<%=
|
135
|
+
<%= javascript_pack_tag 'application' %>
|
136
|
+
<%= stylesheet_pack_tag 'application' %>
|
137
137
|
```
|
138
138
|
|
139
|
-
If you want to link a static asset for `<
|
140
|
-
can use the `asset_pack_path` helper:
|
141
|
-
|
139
|
+
If you want to link a static asset for `<img />` tag, you can use the `asset_pack_path` helper:
|
142
140
|
```erb
|
143
|
-
<link rel="prefetch" href="<%= asset_pack_path 'application.css' %>" />
|
144
141
|
<img src="<%= asset_pack_path 'images/logo.svg' %>" />
|
145
142
|
```
|
146
143
|
|
144
|
+
Or use the dedicated helper:
|
145
|
+
```erb
|
146
|
+
<%= image_pack_tag 'application.png', size: '16x10', alt: 'Edit Entry' %>
|
147
|
+
<%= image_pack_tag 'picture.png', srcset: { 'picture-2x.png' => '2x' } %>
|
148
|
+
```
|
149
|
+
|
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
|
+
```
|
154
|
+
|
155
|
+
If you want to preload a static asset in your `<head>`, you can use the `preload_pack_asset` helper:
|
156
|
+
```erb
|
157
|
+
<%= preload_pack_asset 'fonts/fa-regular-400.woff2' %>
|
158
|
+
```
|
159
|
+
|
160
|
+
If you want to use images in your stylesheets:
|
161
|
+
|
162
|
+
```css
|
163
|
+
.foo {
|
164
|
+
background-image: url('../images/logo.svg')
|
165
|
+
}
|
166
|
+
```
|
167
|
+
|
168
|
+
Note, if you are using server-side rendering of JavaScript with dynamic code-spliting,
|
169
|
+
as is often done with extensions to Webpacker, like [React on Rails](https://github.com/shakacode/react_on_rails)
|
170
|
+
your JavaScript should create the link prefetch HTML tags that you will use, so you won't
|
171
|
+
need to use to `asset_pack_path` in those circumstances.
|
172
|
+
|
147
173
|
**Note:** In order for your styles or static assets files to be available in your view,
|
148
|
-
you would need to link them in your "pack" or entry file.
|
174
|
+
you would need to link them in your "pack" or entry file. Otherwise, Webpack won't know
|
175
|
+
to package up those files.
|
149
176
|
|
150
177
|
### Development
|
151
178
|
|
@@ -157,11 +184,20 @@ are loaded based on your environment.
|
|
157
184
|
In development, Webpacker compiles on demand rather than upfront by default. This
|
158
185
|
happens when you refer to any of the pack assets using the Webpacker helper methods.
|
159
186
|
This means that you don't have to run any separate processes. Compilation errors are logged
|
160
|
-
to the standard Rails log.
|
187
|
+
to the standard Rails log. However, this auto-compilation happens when a web request
|
188
|
+
is made that requires an updated webpack build, not when files change. Thus, that can
|
189
|
+
be painfully slow for front-end development in this default way. Instead, you should either
|
190
|
+
run the `bin/webpack --watch` or run `./bin/webpack-dev-server`
|
161
191
|
|
162
|
-
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`.
|
163
|
-
in a terminal separate from `bundle exec rails s`.
|
164
|
-
in the `app/
|
192
|
+
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`.
|
193
|
+
Windows users will need to run these commands in a terminal separate from `bundle exec rails s`.
|
194
|
+
This process will watch for changes in the `app/packs/entrypoints/*.js` files and automatically
|
195
|
+
reload the browser to match. This feature is also known as
|
196
|
+
[Hot Module Replacement](https://webpack.js.org/concepts/hot-module-replacement/).
|
197
|
+
|
198
|
+
HMR is only the first step to running "Fast Refresh" with React. For more information
|
199
|
+
on how to configure rails/webpacker for Fast Refresh with React, see article
|
200
|
+
[HMR and React Hot Reloading](https://github.com/shakacode/react_on_rails/blob/master/docs/rails-webpacker-react-integration-options.md#hmr-and-react-hot-reloading).
|
165
201
|
|
166
202
|
```bash
|
167
203
|
# webpack dev server
|
@@ -174,9 +210,10 @@ in the `app/javascript/packs/*.js` files and automatically reload the browser to
|
|
174
210
|
./bin/webpack
|
175
211
|
```
|
176
212
|
|
177
|
-
Once you start this development server, Webpacker will automatically start proxying all
|
178
|
-
webpack asset requests to this server. When you stop
|
179
|
-
on-demand compilation
|
213
|
+
Once you start this webpack development server, Webpacker will automatically start proxying all
|
214
|
+
webpack asset requests to this server. When you stop this server, Rails will detect
|
215
|
+
that it's not running and Rails will revert back to on-demand compilation _if_ you have
|
216
|
+
the `compile` option set to true in your `config/webpacker.yml`
|
180
217
|
|
181
218
|
You can use environment variables as options supported by
|
182
219
|
[webpack-dev-server](https://webpack.js.org/configuration/dev-server/) in the
|
@@ -212,7 +249,7 @@ WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpack-dev-server
|
|
212
249
|
Webpacker gives you a default set of configuration files for test, development and
|
213
250
|
production environments in `config/webpack/*.js`. You can configure each individual
|
214
251
|
environment in their respective files or configure them all in the base
|
215
|
-
`config/webpack/
|
252
|
+
`config/webpack/base.js` file.
|
216
253
|
|
217
254
|
By default, you don't need to make any changes to `config/webpack/*.js`
|
218
255
|
files since it's all standard production-ready configuration. However,
|
@@ -256,23 +293,26 @@ const { webpackConfig } = require('@rails/webpacker')
|
|
256
293
|
|
257
294
|
console.log(webpackConfig.output_path)
|
258
295
|
console.log(webpackConfig.source_path)
|
296
|
+
|
297
|
+
// Or to print out your whole webpack configuration
|
298
|
+
console.log(JSON.stringify(webpackConfig, undefined, 2))
|
259
299
|
```
|
260
300
|
|
261
301
|
### Integrations
|
262
302
|
|
263
303
|
Webpacker out of the box supports JS and static assets (fonts, images etc.)
|
264
|
-
compilation. To enable support for
|
265
|
-
relevant packages
|
304
|
+
compilation. To enable support for CoffeeScript or TypeScript install
|
305
|
+
relevant packages:
|
266
306
|
|
267
|
-
|
307
|
+
#### CoffeeScript
|
268
308
|
|
269
|
-
```
|
309
|
+
```bash
|
270
310
|
yarn add coffeescript coffee-loader
|
271
311
|
```
|
272
312
|
|
273
|
-
|
313
|
+
#### TypeScript
|
274
314
|
|
275
|
-
```
|
315
|
+
```bash
|
276
316
|
yarn add typescript @babel/preset-typescript
|
277
317
|
```
|
278
318
|
|
@@ -289,7 +329,7 @@ Add tsconfig.json
|
|
289
329
|
"moduleResolution": "node",
|
290
330
|
"baseUrl": ".",
|
291
331
|
"paths": {
|
292
|
-
"*": ["node_modules/*", "app/
|
332
|
+
"*": ["node_modules/*", "app/packs/*"]
|
293
333
|
},
|
294
334
|
"sourceMap": true,
|
295
335
|
"target": "es5",
|
@@ -300,15 +340,33 @@ Add tsconfig.json
|
|
300
340
|
}
|
301
341
|
```
|
302
342
|
|
303
|
-
|
343
|
+
Babel won’t perform any type-checking on TypeScript code. To optionally use type-checking run:
|
344
|
+
|
345
|
+
```bash
|
346
|
+
yarn add fork-ts-checker-webpack-plugin
|
347
|
+
```
|
348
|
+
|
349
|
+
Then modify the webpack config to use it as a plugin:
|
304
350
|
|
305
|
-
|
351
|
+
```js
|
352
|
+
// config/webpack/base.js
|
353
|
+
const { webpackConfig, merge } = require("@rails/webpacker");
|
354
|
+
const ForkTSCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
|
306
355
|
|
356
|
+
module.exports = merge(webpackConfig, {
|
357
|
+
plugins: [new ForkTSCheckerWebpackPlugin()],
|
358
|
+
});
|
307
359
|
```
|
360
|
+
|
361
|
+
#### CSS
|
362
|
+
|
363
|
+
To enable CSS support in your application, add following packages:
|
364
|
+
|
365
|
+
```bash
|
308
366
|
yarn add css-loader mini-css-extract-plugin css-minimizer-webpack-plugin
|
309
367
|
```
|
310
368
|
|
311
|
-
optionally, add css extension to webpack config for easy resolution
|
369
|
+
optionally, add the css extension to webpack config for easy resolution.
|
312
370
|
|
313
371
|
```js
|
314
372
|
// config/webpack/base.js
|
@@ -327,27 +385,33 @@ then add the relevant pre-processors:
|
|
327
385
|
|
328
386
|
#### Postcss
|
329
387
|
|
330
|
-
```
|
388
|
+
```bash
|
331
389
|
yarn add postcss-loader
|
332
390
|
```
|
333
391
|
|
334
392
|
#### Sass
|
335
393
|
|
336
|
-
```
|
337
|
-
yarn add sass-loader
|
394
|
+
```bash
|
395
|
+
yarn add sass sass-loader
|
338
396
|
```
|
339
397
|
|
340
398
|
#### Less
|
341
399
|
|
400
|
+
```bash
|
401
|
+
yarn add less less-loader
|
342
402
|
```
|
343
|
-
|
403
|
+
|
404
|
+
#### Stylus
|
405
|
+
|
406
|
+
```bash
|
407
|
+
yarn add stylus stylus-loader
|
344
408
|
```
|
345
409
|
|
346
410
|
#### React
|
347
411
|
|
348
412
|
React is supported and you just need to add relevant packages,
|
349
413
|
|
350
|
-
```
|
414
|
+
```bash
|
351
415
|
yarn add react react-dom @babel/preset-react
|
352
416
|
```
|
353
417
|
|
@@ -372,16 +436,19 @@ if you are using typescript, update your `tsconfig.json`
|
|
372
436
|
}
|
373
437
|
```
|
374
438
|
|
439
|
+
For more information on React props hydration and Server-Side Rendering (SSR), see the article
|
440
|
+
[Rails/Webpacker React Integration Options](https://github.com/shakacode/react_on_rails/blob/master/docs/rails-webpacker-react-integration-options.md)
|
441
|
+
in the [ShakaCode/react_on_rails](https://github.com/shakacode/react_on_rails) repo.
|
442
|
+
|
375
443
|
#### Other frameworks
|
376
444
|
|
377
445
|
Please follow webpack integration guide for relevant framework or library,
|
378
446
|
|
379
|
-
1. Svelte
|
380
|
-
2. Angular
|
381
|
-
3. Vue
|
382
|
-
|
383
|
-
For example to add Vue support,
|
447
|
+
1. [Svelte](https://github.com/sveltejs/svelte-loader#install)
|
448
|
+
2. [Angular](https://v2.angular.io/docs/ts/latest/guide/webpack.html#!#configure-webpack)
|
449
|
+
3. [Vue](https://vue-loader.vuejs.org/guide/)
|
384
450
|
|
451
|
+
For example to add Vue support:
|
385
452
|
```js
|
386
453
|
// config/webpack/rules/vue.js
|
387
454
|
const VueLoaderPlugin = require('vue-loader/lib/plugin')
|
@@ -397,7 +464,9 @@ module.exports = {
|
|
397
464
|
},
|
398
465
|
plugins: [new VueLoaderPlugin()]
|
399
466
|
}
|
467
|
+
```
|
400
468
|
|
469
|
+
```js
|
401
470
|
// config/webpack/base.js
|
402
471
|
const { webpackConfig, merge } = require('@rails/webpacker')
|
403
472
|
const vueConfig = require('./rules/vue')
|
@@ -445,11 +514,11 @@ Please note, binstubs compiles in development mode however rake tasks
|
|
445
514
|
compiles in production mode.
|
446
515
|
|
447
516
|
```bash
|
448
|
-
# Compiles in development mode unless NODE_ENV is specified
|
517
|
+
# Compiles in development mode unless NODE_ENV is specified, per the binstub source
|
449
518
|
./bin/webpack
|
450
519
|
./bin/webpack-dev-server
|
451
520
|
|
452
|
-
#
|
521
|
+
# Compiles in production mode by default unless NODE_ENV is specified, per `lib/tasks/webpacker/compile.rake`
|
453
522
|
bundle exec rails assets:precompile
|
454
523
|
bundle exec rails webpacker:compile
|
455
524
|
```
|
@@ -459,8 +528,12 @@ bundle exec rails webpacker:compile
|
|
459
528
|
You can run following commands to upgrade Webpacker to the latest stable version. This process involves upgrading the gem and related JavaScript packages:
|
460
529
|
|
461
530
|
```bash
|
531
|
+
# check your Gemfile for version restrictions
|
462
532
|
bundle update webpacker
|
533
|
+
|
534
|
+
# overwrite your changes to the default install files and revert any unwanted changes from the install
|
463
535
|
rails webpacker:install
|
536
|
+
|
464
537
|
yarn upgrade @rails/webpacker --latest
|
465
538
|
yarn upgrade webpack-dev-server --latest
|
466
539
|
|
@@ -468,6 +541,8 @@ yarn upgrade webpack-dev-server --latest
|
|
468
541
|
yarn add @rails/webpacker@next
|
469
542
|
```
|
470
543
|
|
544
|
+
Also, consult the [CHANGELOG](./CHANGELOG.md) for additional upgrade links.
|
545
|
+
|
471
546
|
## Paths
|
472
547
|
|
473
548
|
By default, Webpacker ships with simple conventions for where the JavaScript
|
@@ -475,19 +550,18 @@ app files and compiled webpack bundles will go in your Rails app.
|
|
475
550
|
All these options are configurable from `config/webpacker.yml` file.
|
476
551
|
|
477
552
|
The configuration for what webpack is supposed to compile by default rests
|
478
|
-
on the convention that every file in `app/
|
553
|
+
on the convention that every file in `app/packs/entrypoints/*`**(default)**
|
479
554
|
or whatever path you set for `source_entry_path` in the `webpacker.yml` configuration
|
480
555
|
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
|
481
556
|
an entry file. As a rule of thumb, put all files you want to link in your views inside
|
482
|
-
"packs" directory and keep everything else under `app/
|
557
|
+
"packs" directory and keep everything else under `app/packs`.
|
483
558
|
|
484
|
-
Suppose you want to change the source directory from `app/
|
559
|
+
Suppose you want to change the source directory from `app/packs`
|
485
560
|
to `frontend` and output to `assets/packs`. This is how you would do it:
|
486
561
|
|
487
562
|
```yml
|
488
563
|
# config/webpacker.yml
|
489
|
-
source_path: frontend
|
490
|
-
source_entry_path: packs
|
564
|
+
source_path: frontend # packs are in frontend/packs
|
491
565
|
public_output_path: assets/packs # outputs to => public/assets/packs
|
492
566
|
```
|
493
567
|
|
@@ -501,7 +575,9 @@ development:
|
|
501
575
|
port: 3035
|
502
576
|
```
|
503
577
|
|
504
|
-
If you have `hmr` turned to true, then the `stylesheet_pack_tag` generates no output,
|
578
|
+
If you have `hmr` turned to true, then the `stylesheet_pack_tag` generates no output,
|
579
|
+
as you will want to configure your styles to be inlined in your JavaScript for hot reloading.
|
580
|
+
During production and testing, the `stylesheet_pack_tag` will create the appropriate HTML tags.
|
505
581
|
|
506
582
|
### Additional paths
|
507
583
|
|
@@ -512,7 +588,7 @@ option available in `config/webpacker.yml`. This lets you
|
|
512
588
|
add additional paths that webpack should lookup when resolving modules:
|
513
589
|
|
514
590
|
```yml
|
515
|
-
additional_paths: ['app/assets
|
591
|
+
additional_paths: ['app/assets', 'vendor/assets']
|
516
592
|
```
|
517
593
|
|
518
594
|
You can then import these items inside your modules like so:
|
@@ -533,6 +609,10 @@ Webpacker hooks up a new `webpacker:compile` task to `assets:precompile`, which
|
|
533
609
|
|
534
610
|
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.
|
535
611
|
|
612
|
+
## Troubleshooting
|
613
|
+
|
614
|
+
See the doc page for [Troubleshooting](./docs/troubleshooting.md).
|
615
|
+
|
536
616
|
## Contributing
|
537
617
|
|
538
618
|
[![Code Helpers](https://www.codetriage.com/rails/webpacker/badges/users.svg)](https://www.codetriage.com/rails/webpacker)
|