webpacker 5.1.1 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.js +8 -8
- data/.github/workflows/jest.yml +38 -0
- data/.github/workflows/js-lint.yml +39 -0
- data/.github/workflows/rubocop.yml +39 -0
- data/.github/workflows/ruby.yml +70 -0
- data/.node-version +1 -1
- data/CHANGELOG.md +9 -3
- data/Gemfile.lock +76 -76
- data/README.md +11 -19
- data/docs/css.md +58 -3
- data/docs/integrations.md +1 -1
- data/docs/target.md +22 -0
- data/docs/testing.md +1 -1
- data/docs/troubleshooting.md +3 -1
- data/docs/typescript.md +44 -0
- data/docs/webpack-dev-server.md +1 -1
- data/lib/install/config/babel.config.js +1 -3
- data/lib/install/config/webpacker.yml +1 -1
- data/lib/tasks/webpacker/check_node.rake +1 -1
- data/lib/tasks/webpacker/check_yarn.rake +1 -1
- data/lib/webpacker/compiler.rb +7 -2
- data/lib/webpacker/configuration.rb +12 -4
- data/lib/webpacker/dev_server_runner.rb +2 -2
- data/lib/webpacker/helper.rb +25 -6
- data/lib/webpacker/railtie.rb +2 -2
- data/lib/webpacker/runner.rb +1 -0
- data/lib/webpacker/version.rb +1 -1
- data/lib/webpacker/webpack_runner.rb +2 -2
- data/package.json +29 -29
- data/package/__tests__/config.js +12 -1
- data/package/__tests__/development.js +14 -1
- data/package/config.js +4 -1
- data/package/configPath.js +3 -0
- data/package/env.js +1 -2
- data/package/environments/__tests__/base.js +26 -9
- data/package/environments/base.js +5 -6
- data/package/environments/development.js +39 -33
- data/package/environments/production.js +1 -3
- data/package/rules/babel.js +11 -4
- data/package/rules/file.js +1 -0
- data/package/rules/node_modules.js +1 -3
- data/package/rules/sass.js +1 -1
- data/package/utils/helpers.js +1 -1
- data/test/compiler_test.rb +8 -3
- data/test/configuration_test.rb +8 -7
- data/test/dev_server_runner_test.rb +1 -1
- data/test/helper_test.rb +3 -0
- data/test/test_app/config/webpacker.yml +7 -1
- data/test/test_app/public/packs/manifest.json +1 -0
- data/test/webpack_runner_test.rb +1 -1
- data/yarn.lock +2422 -2932
- metadata +10 -4
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Webpacker
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/rails/webpacker.svg?branch=master)](https://travis-ci.org/rails/webpacker)
|
4
|
-
[![node.js](https://img.shields.io/badge/node-%3E%3D%2010.
|
4
|
+
[![node.js](https://img.shields.io/badge/node-%3E%3D%2010.17.0-brightgreen.svg)](https://www.npmjs.com/package/@rails/webpacker)
|
5
5
|
[![Gem](https://img.shields.io/gem/v/webpacker.svg)](https://rubygems.org/gems/webpacker)
|
6
6
|
|
7
7
|
Webpacker makes it easy to use the JavaScript pre-processor and bundler
|
@@ -35,6 +35,7 @@ in which case you may not even need the asset pipeline. This is mostly relevant
|
|
35
35
|
- [Elm](./docs/integrations.md#elm)
|
36
36
|
- [Stimulus](./docs/integrations.md#stimulus)
|
37
37
|
- [Svelte](./docs/integrations.md#svelte)
|
38
|
+
- [Typescript](./docs/typescript.md)
|
38
39
|
- [CoffeeScript](./docs/integrations.md#coffeescript)
|
39
40
|
- [Erb](./docs/integrations.md#erb)
|
40
41
|
- [Paths](#paths)
|
@@ -51,7 +52,7 @@ in which case you may not even need the asset pipeline. This is mostly relevant
|
|
51
52
|
|
52
53
|
- Ruby 2.4+
|
53
54
|
- Rails 5.2+
|
54
|
-
- Node.js 10.
|
55
|
+
- Node.js 10.17.0+
|
55
56
|
- Yarn 1.x+
|
56
57
|
|
57
58
|
## Features
|
@@ -121,8 +122,11 @@ app/javascript:
|
|
121
122
|
├── packs:
|
122
123
|
│ # only webpack entry files here
|
123
124
|
│ └── application.js
|
124
|
-
└── src:
|
125
125
|
│ └── application.css
|
126
|
+
└── src:
|
127
|
+
│ └── my_component.js
|
128
|
+
└── stylesheets:
|
129
|
+
│ └── my_styles.css
|
126
130
|
└── images:
|
127
131
|
└── logo.svg
|
128
132
|
```
|
@@ -318,7 +322,7 @@ Included install integrations:
|
|
318
322
|
- [Svelte](./docs/integrations.md#Svelte)
|
319
323
|
- [Stimulus](./docs/integrations.md#Stimulus)
|
320
324
|
- [CoffeeScript](./docs/integrations.md#CoffeeScript)
|
321
|
-
- [Typescript](./docs/
|
325
|
+
- [Typescript](./docs/typescript.md)
|
322
326
|
- [Erb](./docs/integrations.md#Erb)
|
323
327
|
|
324
328
|
See [Integrations](./docs/integrations.md) for further details.
|
@@ -362,12 +366,12 @@ If you have `hmr` turned to true, then the `stylesheet_pack_tag` generates no ou
|
|
362
366
|
|
363
367
|
If you are adding Webpacker to an existing app that has most of the assets inside
|
364
368
|
`app/assets` or inside an engine, and you want to share that
|
365
|
-
with webpack modules, you can use the `
|
369
|
+
with webpack modules, you can use the `additional_paths`
|
366
370
|
option available in `config/webpacker.yml`. This lets you
|
367
371
|
add additional paths that webpack should lookup when resolving modules:
|
368
372
|
|
369
373
|
```yml
|
370
|
-
|
374
|
+
additional_paths: ['app/assets']
|
371
375
|
```
|
372
376
|
|
373
377
|
You can then import these items inside your modules like so:
|
@@ -382,18 +386,6 @@ import 'images/rails.png'
|
|
382
386
|
will make the compilation slow, consider adding specific paths instead of
|
383
387
|
whole parent directory if you just need to reference one or two modules
|
384
388
|
|
385
|
-
### Watched
|
386
|
-
|
387
|
-
By default, the lazy compilation is cached until a file is changed under your
|
388
|
-
tracked paths. You can configure which paths are tracked
|
389
|
-
by adding new paths to `watched_paths` array. This is much like Rails' `autoload_paths`:
|
390
|
-
|
391
|
-
```rb
|
392
|
-
# config/initializers/webpacker.rb
|
393
|
-
# or config/application.rb
|
394
|
-
Webpacker::Compiler.watched_paths << 'bower_components'
|
395
|
-
```
|
396
|
-
|
397
389
|
## Deployment
|
398
390
|
|
399
391
|
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).
|
@@ -407,7 +399,7 @@ When compiling assets for production on a remote server, such as a continuous in
|
|
407
399
|
- [Webpack-dev-server](./docs/webpack-dev-server.md)
|
408
400
|
- [Environment Variables](./docs/env.md)
|
409
401
|
- [Folder Structure](./docs/folder-structure.md)
|
410
|
-
- [Assets](./docs/assets.md) - [CSS, Sass and SCSS](./docs/css.md) - [ES6](./docs/es6.md)
|
402
|
+
- [Assets](./docs/assets.md) - [CSS, Sass and SCSS](./docs/css.md) - [ES6](./docs/es6.md), [Target browsers](./docs/target.md)
|
411
403
|
- [Props](./docs/props.md)
|
412
404
|
- [Typescript](./docs/typescript.md)
|
413
405
|
- [Yarn](./docs/yarn.md)
|
data/docs/css.md
CHANGED
@@ -6,7 +6,7 @@ Webpacker supports importing CSS, Sass and SCSS files directly into your JavaScr
|
|
6
6
|
Importing and loading styles is a two step process:
|
7
7
|
|
8
8
|
1. You need to tell webpack which file(s) it has to compile and know how to load
|
9
|
-
|
9
|
+
|
10
10
|
When you do `import '../scss/application.scss'`, you're telling webpack to include `application.scss` in the build. This does not mean it's going to be compiled into your javascript, only that webpack now compiles and knows how to load this file. (How that file compilation is handled is depending on how your loaders (`css-loader`, `sass-loader`, `file-loader`, etc.) are configured.)
|
11
11
|
|
12
12
|
2. You need to load those files in your views
|
@@ -18,6 +18,51 @@ Importing and loading styles is a two step process:
|
|
18
18
|
|
19
19
|
## Import global styles into your JS app
|
20
20
|
|
21
|
+
### Importing CSS as a multi-file pack (Webpacker v5)
|
22
|
+
|
23
|
+
When you add a CSS/SCSS/SASS file to `app/javascript/packs/` directory, make sure to use the same pack name as its complementary JavaScript pack, e.g. `application.js` and `application.css`. By Webpacker convention (as of Webpacker v5), this will bundle `application.js` and `application.scss` as part of the same entry point (also described as [a multi-file entry point in the webpack docs](https://webpack.js.org/concepts/entry-points/#single-entry-shorthand-syntax)). With this approach, you can avoid importing CSS from JS, if desired.
|
24
|
+
|
25
|
+
```
|
26
|
+
app/
|
27
|
+
javascript/
|
28
|
+
packs/
|
29
|
+
application.js
|
30
|
+
application.scss
|
31
|
+
```
|
32
|
+
|
33
|
+
### Importing CSS from CSS
|
34
|
+
|
35
|
+
You can import additional CSS/SCSS/SASS files from within a CSS file:
|
36
|
+
|
37
|
+
```
|
38
|
+
app/
|
39
|
+
javascript/
|
40
|
+
stylesheets/
|
41
|
+
application.scss
|
42
|
+
posts.scss
|
43
|
+
comments.scss
|
44
|
+
```
|
45
|
+
|
46
|
+
```css
|
47
|
+
/* app/javascript/stylesheets/application.scss */
|
48
|
+
|
49
|
+
@import './posts';
|
50
|
+
@import './comments';
|
51
|
+
```
|
52
|
+
|
53
|
+
### Importing CSS provided by an NPM package from SCSS/CSS
|
54
|
+
|
55
|
+
Given your application installs an NPM package that provides CSS, such as `flatpickr`, you can import the CSS file(s) by path from the package directory within `node_modules/`:
|
56
|
+
|
57
|
+
```js
|
58
|
+
/* app/javascript/stylesheets/application.scss */
|
59
|
+
|
60
|
+
@import "flatpickr/dist/flatpickr.css"
|
61
|
+
```
|
62
|
+
|
63
|
+
|
64
|
+
### Importing CSS from JS
|
65
|
+
|
21
66
|
```sass
|
22
67
|
// app/javascript/hello_react/styles/hello-react.sass
|
23
68
|
|
@@ -42,6 +87,16 @@ const Hello = props => (
|
|
42
87
|
)
|
43
88
|
```
|
44
89
|
|
90
|
+
### Importing CSS provided by an NPM package from JS
|
91
|
+
|
92
|
+
Given your application installs an NPM package that provides CSS, such as `flatpickr`, you can import the CSS file(s) by path from the package directory within `node_modules/`. This is an alternative to importing from within a CSS file, as above:
|
93
|
+
|
94
|
+
```js
|
95
|
+
// app/javascript/packs/application.js
|
96
|
+
|
97
|
+
import "flatpickr/dist/flatpickr.css"
|
98
|
+
```
|
99
|
+
|
45
100
|
## Import scoped styles into your JS app
|
46
101
|
|
47
102
|
Stylesheets that end with `.module.*` are treated as [CSS Modules](https://github.com/css-modules/css-modules).
|
@@ -147,14 +202,14 @@ You can use Yarn to add bootstrap or any other modules available on npm:
|
|
147
202
|
yarn add bootstrap
|
148
203
|
```
|
149
204
|
|
150
|
-
Import Bootstrap and theme (optional) CSS in your app/javascript/packs/
|
205
|
+
Import Bootstrap and theme (optional) CSS in your app/javascript/packs/application.js file:
|
151
206
|
|
152
207
|
```js
|
153
208
|
import 'bootstrap/dist/css/bootstrap'
|
154
209
|
import 'bootstrap/dist/css/bootstrap-theme'
|
155
210
|
```
|
156
211
|
|
157
|
-
Or in your app/javascript/
|
212
|
+
Or in your app/javascript/packs/application.sass file:
|
158
213
|
|
159
214
|
```sass
|
160
215
|
// ~ to tell that this is not a relative import
|
data/docs/integrations.md
CHANGED
@@ -91,7 +91,7 @@ You can read more about this in the [Vue docs](https://vuejs.org/v2/guide/instal
|
|
91
91
|
|
92
92
|
### Lazy loading integration
|
93
93
|
|
94
|
-
See [docs/es6](
|
94
|
+
See [docs/es6](es6.md) to know more about Webpack and Webpacker configuration.
|
95
95
|
|
96
96
|
For instance, you can lazy load Vue JS components:
|
97
97
|
|
data/docs/target.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Target browsers
|
2
|
+
|
3
|
+
By default webpacker provides these front-end tools:
|
4
|
+
- [@babel/preset-env](https://github.com/babel/babel/tree/master/packages/babel-preset-env)
|
5
|
+
- [Autoprefixer](https://github.com/postcss/autoprefixer)
|
6
|
+
- [postcss-preset-env](https://github.com/csstools/postcss-preset-env)
|
7
|
+
|
8
|
+
All these tools use [Browserslist](https://github.com/browserslist/browserslist) to detect which environment your users have
|
9
|
+
|
10
|
+
Webpacker browserslist default target:
|
11
|
+
```
|
12
|
+
defaults
|
13
|
+
```
|
14
|
+
|
15
|
+
`defaults`: `(> 0.5%, last 2 versions, Firefox ESR, not dead)`, [browserl.ist](https://browserl.ist/) is an online tool to check what browsers will be selected by some query.
|
16
|
+
|
17
|
+
To keep browsers data up to date, you need to run:
|
18
|
+
```bash
|
19
|
+
yarn upgrade caniuse-lite
|
20
|
+
```
|
21
|
+
|
22
|
+
at least once every few months, to prevent such [problems](https://github.com/browserslist/browserslist/issues/492)
|
data/docs/testing.md
CHANGED
@@ -32,7 +32,7 @@ It is beneficial to use the same webpack configuration file (generated by webpac
|
|
32
32
|
```js
|
33
33
|
// config/webpack/test.js
|
34
34
|
const environment = require('./environment')
|
35
|
-
environment.plugins.get('Manifest').
|
35
|
+
environment.plugins.get('Manifest').options.writeToFileEmit = process.env.NODE_ENV !== 'test'
|
36
36
|
environment.loaders.append('istanbul-instrumenter', {
|
37
37
|
test: /\.ts$/,
|
38
38
|
enforce: "post",
|
data/docs/troubleshooting.md
CHANGED
@@ -4,11 +4,13 @@
|
|
4
4
|
|
5
5
|
1. Read the error message carefully. The error message will tell you the precise key value
|
6
6
|
that is not matching what Webpack expects.
|
7
|
-
2. Put a `debugger` statement in your Webpack configuration and run `bin/webpack --debug`.
|
7
|
+
2. Put a `debugger` statement in your Webpack configuration and run `bin/webpack --debug-webpacker`.
|
8
8
|
If you have a node debugger installed, you'll see the Chrome debugger for your webpack
|
9
9
|
config. For example, install the Chrome extension [NiM](https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj) and
|
10
10
|
set the option for the dev tools to open automatically. For more details on debugging,
|
11
11
|
see the official [Webpack docs on debugging](https://webpack.js.org/contribute/debugging/#devtools)
|
12
|
+
3. Any arguments that you add to bin/webpack get sent to webpack. For example, you can pass `--debug` to switch loaders to debug mode. See [webpack CLI debug options](https://webpack.js.org/api/cli/#debug-options) for more information on the available options.
|
13
|
+
4. You can also pass additional options to the command to run the webpack-dev-server and start the webpack-dev-server with the option `--debug-webpacker`
|
12
14
|
|
13
15
|
## ENOENT: no such file or directory - node-sass
|
14
16
|
|
data/docs/typescript.md
CHANGED
@@ -10,6 +10,50 @@ bundle exec rails webpacker:install:typescript
|
|
10
10
|
|
11
11
|
After that, a new file called `hello_typescript.ts` will be present in your `packs` directory (or rather the `source_entry_path` of your `webpacker.yml` configuration). You're now ready to write TypeScript.
|
12
12
|
|
13
|
+
## (Optional) Adding Compile-Time Type Checking
|
14
|
+
|
15
|
+
The default installation only transpiles your TypeScript code using Babel. If you would like to enable type checking as part of the Webpack compilation process (i.e. fail the build if there are TS errors), you can do the following:
|
16
|
+
|
17
|
+
1. Install the Fork TS Checker Webpack Plugin
|
18
|
+
|
19
|
+
```sh
|
20
|
+
yarn add --dev fork-ts-checker-webpack-plugin
|
21
|
+
```
|
22
|
+
|
23
|
+
2. Then add it to your development environment config in `config/webpack/development.js`
|
24
|
+
|
25
|
+
```js
|
26
|
+
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
|
27
|
+
const path = require("path");
|
28
|
+
|
29
|
+
environment.plugins.append(
|
30
|
+
"ForkTsCheckerWebpackPlugin",
|
31
|
+
new ForkTsCheckerWebpackPlugin({
|
32
|
+
typescript: {
|
33
|
+
configFile: path.resolve(__dirname, "../../tsconfig.json"),
|
34
|
+
},
|
35
|
+
async: false,
|
36
|
+
})
|
37
|
+
);
|
38
|
+
```
|
39
|
+
|
40
|
+
If you are `fork-ts-checker-webpack-plugin` older than 5.0, the `tsconfig` option also needs to be specified:
|
41
|
+
|
42
|
+
```js
|
43
|
+
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin");
|
44
|
+
const path = require("path");
|
45
|
+
|
46
|
+
environment.plugins.append(
|
47
|
+
"ForkTsCheckerWebpackPlugin",
|
48
|
+
new ForkTsCheckerWebpackPlugin({
|
49
|
+
// this is a relative path to your project's TypeScript config
|
50
|
+
tsconfig: path.resolve(__dirname, "../../tsconfig.json"),
|
51
|
+
// non-async so type checking will block compilation
|
52
|
+
async: false,
|
53
|
+
})
|
54
|
+
);
|
55
|
+
```
|
56
|
+
|
13
57
|
## Upgrading to 5.1
|
14
58
|
|
15
59
|
If you update your App to `webpacker >= 5.1` and had TypeScript installed before, you need to add some new/remove some old configurations:
|
data/docs/webpack-dev-server.md
CHANGED
@@ -19,7 +19,7 @@ Now if you refresh your Rails view everything should work as expected.
|
|
19
19
|
Webpacker out-of-the-box supports HMR with `webpack-dev-server` and
|
20
20
|
you can toggle it by setting `dev_server/hmr` option inside `webpacker.yml`.
|
21
21
|
|
22
|
-
|
22
|
+
Check out this guide for more information:
|
23
23
|
|
24
24
|
- https://webpack.js.org/configuration/dev-server/#devserver-hot
|
25
25
|
|
@@ -10,7 +10,7 @@ default: &default
|
|
10
10
|
|
11
11
|
# Additional paths webpack should lookup modules
|
12
12
|
# ['app/assets', 'engine/foo/app/assets']
|
13
|
-
|
13
|
+
additional_paths: []
|
14
14
|
|
15
15
|
# Reload manifest.json on all requests so we reload latest compiled packs
|
16
16
|
cache_manifest: false
|
@@ -3,7 +3,7 @@ namespace :webpacker do
|
|
3
3
|
desc "Verifies if Node.js is installed"
|
4
4
|
task :check_node do
|
5
5
|
begin
|
6
|
-
node_version = `node -v || nodejs -v
|
6
|
+
node_version = `node -v || nodejs -v`.strip
|
7
7
|
raise Errno::ENOENT if node_version.blank?
|
8
8
|
|
9
9
|
pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
|
@@ -3,7 +3,7 @@ namespace :webpacker do
|
|
3
3
|
desc "Verifies if Yarn is installed"
|
4
4
|
task :check_yarn do
|
5
5
|
begin
|
6
|
-
yarn_version = `yarn --version
|
6
|
+
yarn_version = `yarn --version`.strip
|
7
7
|
raise Errno::ENOENT if yarn_version.blank?
|
8
8
|
|
9
9
|
pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
|
data/lib/webpacker/compiler.rb
CHANGED
@@ -4,6 +4,8 @@ require "digest/sha1"
|
|
4
4
|
class Webpacker::Compiler
|
5
5
|
# Additional paths that test compiler needs to watch
|
6
6
|
# Webpacker::Compiler.watched_paths << 'bower_components'
|
7
|
+
#
|
8
|
+
# Deprecated. Use additional_paths in the YAML configuration instead.
|
7
9
|
cattr_accessor(:watched_paths) { [] }
|
8
10
|
|
9
11
|
# Additional environment variables that the compiler is being run with
|
@@ -50,6 +52,8 @@ class Webpacker::Compiler
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def watched_files_digest
|
55
|
+
warn "Webpacker::Compiler.watched_paths has been deprecated. Set additional_paths in webpacker.yml instead." unless watched_paths.empty?
|
56
|
+
|
53
57
|
files = Dir[*default_watched_paths, *watched_paths].reject { |f| File.directory?(f) }
|
54
58
|
file_ids = files.sort.map { |f| "#{File.basename(f)}/#{Digest::SHA1.file(f).hexdigest}" }
|
55
59
|
Digest::SHA1.hexdigest(file_ids.join("/"))
|
@@ -86,7 +90,7 @@ class Webpacker::Compiler
|
|
86
90
|
|
87
91
|
def default_watched_paths
|
88
92
|
[
|
89
|
-
*config.
|
93
|
+
*config.additional_paths_globbed,
|
90
94
|
config.source_path_globbed,
|
91
95
|
"yarn.lock", "package.json",
|
92
96
|
"config/webpack/**/*"
|
@@ -101,6 +105,7 @@ class Webpacker::Compiler
|
|
101
105
|
return env unless defined?(ActionController::Base)
|
102
106
|
|
103
107
|
env.merge("WEBPACKER_ASSET_HOST" => ENV.fetch("WEBPACKER_ASSET_HOST", ActionController::Base.helpers.compute_asset_host),
|
104
|
-
"WEBPACKER_RELATIVE_URL_ROOT" => ENV.fetch("WEBPACKER_RELATIVE_URL_ROOT", ActionController::Base.relative_url_root)
|
108
|
+
"WEBPACKER_RELATIVE_URL_ROOT" => ENV.fetch("WEBPACKER_RELATIVE_URL_ROOT", ActionController::Base.relative_url_root),
|
109
|
+
"WEBPACKER_CONFIG" => webpacker.config_path.to_s)
|
105
110
|
end
|
106
111
|
end
|
@@ -27,12 +27,12 @@ class Webpacker::Configuration
|
|
27
27
|
globbed_path_with_extensions(source_path.relative_path_from(root_path))
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
31
|
-
fetch(:resolved_paths
|
30
|
+
def additional_paths
|
31
|
+
fetch(:additional_paths) + resolved_paths
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
|
34
|
+
def additional_paths_globbed
|
35
|
+
additional_paths.map { |p| globbed_path_with_extensions(p) }
|
36
36
|
end
|
37
37
|
|
38
38
|
def source_entry_path
|
@@ -76,6 +76,14 @@ class Webpacker::Configuration
|
|
76
76
|
end
|
77
77
|
|
78
78
|
private
|
79
|
+
def resolved_paths
|
80
|
+
paths = data.fetch(:resolved_paths, [])
|
81
|
+
|
82
|
+
warn "The resolved_paths option has been deprecated. Use additional_paths instead." unless paths.empty?
|
83
|
+
|
84
|
+
paths
|
85
|
+
end
|
86
|
+
|
79
87
|
def fetch(key)
|
80
88
|
data.fetch(key, defaults[key])
|
81
89
|
end
|
@@ -45,6 +45,7 @@ module Webpacker
|
|
45
45
|
|
46
46
|
def execute_cmd
|
47
47
|
env = Webpacker::Compiler.env
|
48
|
+
env["WEBPACKER_CONFIG"] = @webpacker_config
|
48
49
|
|
49
50
|
cmd = if node_modules_bin_exist?
|
50
51
|
["#{@node_modules_bin_path}/webpack-dev-server"]
|
@@ -52,9 +53,8 @@ module Webpacker
|
|
52
53
|
["yarn", "webpack-dev-server"]
|
53
54
|
end
|
54
55
|
|
55
|
-
if
|
56
|
+
if @argv.include?("--debug-webpacker")
|
56
57
|
cmd = [ "node", "--inspect-brk"] + cmd
|
57
|
-
ARGV.delete("--debug")
|
58
58
|
end
|
59
59
|
|
60
60
|
cmd += ["--config", @webpack_config]
|
data/lib/webpacker/helper.rb
CHANGED
@@ -46,7 +46,16 @@ module Webpacker::Helper
|
|
46
46
|
#
|
47
47
|
# <%= image_pack_tag 'application.png', size: '16x10', alt: 'Edit Entry' %>
|
48
48
|
# <img alt='Edit Entry' src='/packs/application-k344a6d59eef8632c9d1.png' width='16' height='10' />
|
49
|
+
#
|
50
|
+
# <%= image_pack_tag 'picture.png', srcset: { 'picture-2x.png' => '2x' } %>
|
51
|
+
# <img srcset= "/packs/picture-2x-7cca48e6cae66ec07b8e.png 2x" src="/packs/picture-c38deda30895059837cf.png" >
|
49
52
|
def image_pack_tag(name, **options)
|
53
|
+
if options[:srcset] && !options[:srcset].is_a?(String)
|
54
|
+
options[:srcset] = options[:srcset].map do |src_name, size|
|
55
|
+
"#{resolve_path_to_image(src_name)} #{size}"
|
56
|
+
end.join(", ")
|
57
|
+
end
|
58
|
+
|
50
59
|
image_tag(resolve_path_to_image(name), options)
|
51
60
|
end
|
52
61
|
|
@@ -77,6 +86,7 @@ module Webpacker::Helper
|
|
77
86
|
# By default, this list is auto-generated to match everything in
|
78
87
|
# app/javascript/packs/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
|
79
88
|
# See: https://webpack.js.org/plugins/split-chunks-plugin/
|
89
|
+
#
|
80
90
|
# Example:
|
81
91
|
#
|
82
92
|
# <%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %> # =>
|
@@ -85,11 +95,15 @@ module Webpacker::Helper
|
|
85
95
|
# <script src="/packs/calendar-1016838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
|
86
96
|
# <script src="/packs/map~runtime-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
|
87
97
|
# <script src="/packs/map-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
|
98
|
+
#
|
88
99
|
# DO:
|
89
|
-
#
|
100
|
+
#
|
101
|
+
# <%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
|
102
|
+
#
|
90
103
|
# DON'T:
|
91
|
-
#
|
92
|
-
#
|
104
|
+
#
|
105
|
+
# <%= javascript_packs_with_chunks_tag 'calendar' %>
|
106
|
+
# <%= javascript_packs_with_chunks_tag 'map' %>
|
93
107
|
def javascript_packs_with_chunks_tag(*names, **options)
|
94
108
|
javascript_include_tag(*sources_from_manifest_entrypoints(names, type: :javascript), **options)
|
95
109
|
end
|
@@ -97,6 +111,7 @@ module Webpacker::Helper
|
|
97
111
|
# Creates a link tag, for preloading, that references a given Webpacker asset.
|
98
112
|
# In production mode, the digested reference is automatically looked up.
|
99
113
|
# See: https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content
|
114
|
+
#
|
100
115
|
# Example:
|
101
116
|
#
|
102
117
|
# <%= preload_pack_asset 'fonts/fa-regular-400.woff2' %> # =>
|
@@ -143,11 +158,15 @@ module Webpacker::Helper
|
|
143
158
|
# <link rel="stylesheet" media="screen" href="/packs/3-8c7ce31a.chunk.css" />
|
144
159
|
# <link rel="stylesheet" media="screen" href="/packs/calendar-8c7ce31a.chunk.css" />
|
145
160
|
# <link rel="stylesheet" media="screen" href="/packs/map-8c7ce31a.chunk.css" />
|
161
|
+
#
|
146
162
|
# DO:
|
147
|
-
#
|
163
|
+
#
|
164
|
+
# <%= stylesheet_packs_with_chunks_tag 'calendar', 'map' %>
|
165
|
+
#
|
148
166
|
# DON'T:
|
149
|
-
#
|
150
|
-
#
|
167
|
+
#
|
168
|
+
# <%= stylesheet_packs_with_chunks_tag 'calendar' %>
|
169
|
+
# <%= stylesheet_packs_with_chunks_tag 'map' %>
|
151
170
|
def stylesheet_packs_with_chunks_tag(*names, **options)
|
152
171
|
if current_webpacker_instance.config.extract_css?
|
153
172
|
stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
|