webpacker 4.0.0.rc.2 → 4.0.0.rc.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/CHANGELOG.md +32 -0
- data/Gemfile.lock +2 -2
- data/MIT-LICENSE +1 -1
- data/README.md +26 -1
- data/docs/engines.md +155 -0
- data/docs/webpack.md +26 -22
- data/docs/yarn.md +12 -1
- data/lib/install/config/webpacker.yml +2 -1
- data/lib/install/examples/react/babel.config.js +1 -1
- data/lib/webpacker/compiler.rb +12 -4
- data/lib/webpacker/configuration.rb +1 -1
- data/lib/webpacker/dev_server.rb +7 -1
- data/lib/webpacker/dev_server_proxy.rb +13 -6
- data/lib/webpacker/helper.rb +45 -12
- data/lib/webpacker/manifest.rb +22 -16
- data/lib/webpacker/version.rb +1 -1
- data/package/__tests__/dev_server.js +15 -0
- data/package/config.js +1 -1
- data/package/dev_server.js +3 -1
- data/package/environments/development.js +0 -1
- data/package/rules/node_modules.js +1 -0
- data/package/utils/helpers.js +3 -1
- data/package.json +2 -1
- data/test/configuration_test.rb +9 -0
- data/test/helper_test.rb +1 -1
- data/test/manifest_test.rb +5 -1
- data/test/test_app/config/webpacker.yml +1 -0
- data/test/test_app/config/webpacker_public_root.yml +19 -0
- data/yarn.lock +5 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b4e8fa7b4d57022ab1e34dd1e5ea82e7aeabda41f11c158bdb8989c05fe1c0e
|
4
|
+
data.tar.gz: 0c9f6d2906a79d379d7f3f5fb097b338e740a39452d0bc2ac33dd3bd30eb3895
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee59500d81e622c90f0feddd8c026126eb1f1e14f0d37af880d826af56b60f74b5b3ee380397c36bbbd157de059e48d9f2552e6d72dcd295d310ee7ebaa01a42
|
7
|
+
data.tar.gz: 0fc59e37a1d3fa940ed3b9e5e8e15667c771a0571029142d507f5d0d3577fa70eb670115ccc6ea0540c0b2afa35c9c501049d204701a2a0389a9499e29f2699d
|
data/.travis.yml
CHANGED
@@ -6,6 +6,7 @@ rvm:
|
|
6
6
|
- 2.3.8
|
7
7
|
- 2.4.5
|
8
8
|
- 2.5.3
|
9
|
+
- 2.6.0
|
9
10
|
- ruby-head
|
10
11
|
gemfile:
|
11
12
|
- gemfiles/Gemfile-rails.4.2.x
|
@@ -36,5 +37,9 @@ matrix:
|
|
36
37
|
exclude:
|
37
38
|
- rvm: 2.3.8
|
38
39
|
gemfile: gemfiles/Gemfile-rails-edge
|
40
|
+
- rvm: 2.4.5
|
41
|
+
gemfile: gemfiles/Gemfile-rails-edge
|
42
|
+
- rvm: 2.5.3
|
43
|
+
gemfile: gemfiles/Gemfile-rails-edge
|
39
44
|
- rvm: ruby-head
|
40
45
|
gemfile: gemfiles/Gemfile-rails.4.2.x
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,37 @@
|
|
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.3] - 2019-01-17
|
4
|
+
|
5
|
+
### Fixed
|
6
|
+
- Issue with javascript_pack_tag asset duplication [#1898](https://github.com/rails/webpacker/pull/1898)
|
7
|
+
|
8
|
+
|
9
|
+
### Added
|
10
|
+
- `javascript_packs_with_chunks_tag` helper, which creates html tags
|
11
|
+
for a pack and all the dependent chunks, when using splitchunks.
|
12
|
+
|
13
|
+
```erb
|
14
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
|
15
|
+
|
16
|
+
<script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
17
|
+
<script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
18
|
+
<script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
19
|
+
<script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
20
|
+
<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
21
|
+
```
|
22
|
+
|
23
|
+
**Important:** Pass all your pack names when using `javascript_packs_with_chunks_tag`
|
24
|
+
helper otherwise you will get duplicated chunks on the page.
|
25
|
+
|
26
|
+
```erb
|
27
|
+
<%# DO %>
|
28
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
|
29
|
+
|
30
|
+
<%# DON'T %>
|
31
|
+
<%= javascript_packs_with_chunks_tag 'calendar' %>
|
32
|
+
<%= javascript_packs_with_chunks_tag 'map' %>
|
33
|
+
```
|
34
|
+
|
3
35
|
## [4.0.0.rc.2] - 2018-12-15
|
4
36
|
|
5
37
|
### Fixed
|
data/Gemfile.lock
CHANGED
@@ -14,7 +14,7 @@ GIT
|
|
14
14
|
PATH
|
15
15
|
remote: .
|
16
16
|
specs:
|
17
|
-
webpacker (4.0.0.rc.
|
17
|
+
webpacker (4.0.0.rc.3)
|
18
18
|
activesupport (>= 4.2)
|
19
19
|
rack-proxy (>= 0.6.1)
|
20
20
|
railties (>= 4.2)
|
@@ -156,4 +156,4 @@ DEPENDENCIES
|
|
156
156
|
webpacker!
|
157
157
|
|
158
158
|
BUNDLED WITH
|
159
|
-
1.17.
|
159
|
+
1.17.3
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -142,6 +142,31 @@ can use the `asset_pack_path` helper:
|
|
142
142
|
<img src="<%= asset_pack_path 'images/logo.svg' %>" />
|
143
143
|
```
|
144
144
|
|
145
|
+
If you are using new webpack 4 split chunks API, then consider using `javascript_packs_with_chunks_tag` helper, which creates html
|
146
|
+
tags for a pack and all the dependent chunks.
|
147
|
+
|
148
|
+
```erb
|
149
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
|
150
|
+
|
151
|
+
<script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
152
|
+
<script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
153
|
+
<script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
154
|
+
<script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
155
|
+
<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
156
|
+
```
|
157
|
+
|
158
|
+
**Important:** Pass all your pack names when using `javascript_packs_with_chunks_tag`
|
159
|
+
helper otherwise you will get duplicated chunks on the page.
|
160
|
+
|
161
|
+
```erb
|
162
|
+
<%# DO %>
|
163
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
|
164
|
+
|
165
|
+
<%# DON'T %>
|
166
|
+
<%= javascript_packs_with_chunks_tag 'calendar' %>
|
167
|
+
<%= javascript_packs_with_chunks_tag 'map' %>
|
168
|
+
```
|
169
|
+
|
145
170
|
**Note:** In order for your styles or static assets files to be available in your view,
|
146
171
|
you would need to link them in your "pack" or entry file.
|
147
172
|
|
@@ -269,7 +294,7 @@ You can run following commands to upgrade Webpacker to the latest stable version
|
|
269
294
|
bundle update webpacker
|
270
295
|
rails webpacker:binstubs
|
271
296
|
yarn upgrade @rails/webpacker --latest
|
272
|
-
yarn add webpack-dev-server@^
|
297
|
+
yarn add webpack-dev-server@^3.1.14
|
273
298
|
|
274
299
|
# Or to install a latest release (including pre-releases)
|
275
300
|
yarn add @rails/webpacker@next
|
data/docs/engines.md
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
# Using in Rails engines
|
2
|
+
|
3
|
+
If the application UI consists of multiple frontend application, you'd probably like to isolate their building too (e.g. if you use different frameworks/versions). Hence we needed our webpack(-er) to be isolated too: separate `package.json`, dev server, compilation process.
|
4
|
+
|
5
|
+
You can do this by adding another Webpacker instance to your application.
|
6
|
+
|
7
|
+
This guide describes how to do that using [Rails engines](https://guides.rubyonrails.org/engines.html).
|
8
|
+
|
9
|
+
|
10
|
+
## Step 1: create Rails engine.
|
11
|
+
|
12
|
+
First, you create a Rails engine (say, `MyEngine`). See the offical [Rails guide](https://guides.rubyonrails.org/engines.html).
|
13
|
+
|
14
|
+
## Step 2: install Webpacker within the engine.
|
15
|
+
|
16
|
+
There is no built-in tasks to install Webpacker within the engine, thus you have to add all the require files manually (you can copy them from the main app):
|
17
|
+
- Add `config/webpacker.yml` and `config/webpack/*.js` files
|
18
|
+
- Add `bin/webpack` and `bin/webpack-dev-server` files
|
19
|
+
- Add `package.json` with required deps.
|
20
|
+
|
21
|
+
|
22
|
+
## Step 3: configure Webpacker instance.
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
module MyEngine
|
26
|
+
ROOT_PATH = Pathname.new(File.join(__dir__, ".."))
|
27
|
+
|
28
|
+
class << self
|
29
|
+
def webpacker
|
30
|
+
@webpacker ||= ::Webpacker::Instance.new(
|
31
|
+
root_path: ROOT_PATH,
|
32
|
+
config_path: ROOT_PATH.join("config/webpacker.yml")
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
## Step 4: Configure dev server proxy.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
module MyEngine
|
43
|
+
class Engine < ::Rails::Engine
|
44
|
+
initializer "webpacker.proxy" do |app|
|
45
|
+
insert_middleware = begin
|
46
|
+
MyEngine.webpacker.config.dev_server.present?
|
47
|
+
rescue
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
next unless insert_middleware
|
51
|
+
|
52
|
+
app.middleware.insert_before(
|
53
|
+
0, Webpacker::DevServerProxy, # "Webpacker::DevServerProxy" if Rails version < 5
|
54
|
+
ssl_verify_none: true,
|
55
|
+
webpacker: MyEngine.webpacker
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
If you have multiple webpackers, you would probably want to run multiple dev servers at a time, and hence be able to configure their setting through env vars (e.g. within a `docker-compose.yml` file):
|
63
|
+
|
64
|
+
```yml
|
65
|
+
# webpacker.yml
|
66
|
+
# ...
|
67
|
+
development:
|
68
|
+
# ...
|
69
|
+
dev_server:
|
70
|
+
env_prefix: "MY_ENGINE_WEBPACKER_DEV_SERVER"
|
71
|
+
# ...
|
72
|
+
```
|
73
|
+
|
74
|
+
## Step 5: configure helper.
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
require "webpacker/helper"
|
78
|
+
|
79
|
+
module MyEngine
|
80
|
+
module ApplicationHelper
|
81
|
+
include ::Webpacker::Helper
|
82
|
+
|
83
|
+
def current_webpacker_instance
|
84
|
+
MyEngine.webpacker
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
Now you can use `stylesheet_pack_tag` and `javascript_pack_tag` from within your engine.
|
91
|
+
|
92
|
+
## Step 6: rake tasks.
|
93
|
+
|
94
|
+
Add Rake task to compile assets in production (`rake my_engine:webpacker:compile`)
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
namespace :my_engine do
|
98
|
+
namespace :webpacker do
|
99
|
+
desc "Install deps with yarn"
|
100
|
+
task :yarn_install do
|
101
|
+
Dir.chdir(File.join(__dir__, "../..")) do
|
102
|
+
system "yarn install --no-progress --production"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
desc "Compile JavaScript packs using webpack for production with digests"
|
107
|
+
task compile: [:yarn_install, :environment] do
|
108
|
+
Webpacker.with_node_env("production") do
|
109
|
+
if MyEngine.webpacker.commands.compile
|
110
|
+
# Successful compilation!
|
111
|
+
else
|
112
|
+
# Failed compilation
|
113
|
+
exit!
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
```
|
120
|
+
|
121
|
+
## Step 7: serving compiled packs.
|
122
|
+
|
123
|
+
There are two approaches on serving compiled assets.
|
124
|
+
|
125
|
+
### Put engine's assets to the root app's public/ folder
|
126
|
+
|
127
|
+
You can serve engine's assets using the main app's static files server which serves files from `public/` folder.
|
128
|
+
|
129
|
+
For that you must configure your engine's webpacker to put compiled assets to the app's `public/` folder:
|
130
|
+
|
131
|
+
```yml
|
132
|
+
# my_engine/config/webpacker.yml
|
133
|
+
default: &default
|
134
|
+
# ...
|
135
|
+
# public_root_path could be used to override the path to `public/` folder
|
136
|
+
# (relative to the engine root)
|
137
|
+
public_root_path: ../public
|
138
|
+
# use a different sub-folder name
|
139
|
+
public_output_path: my-engine-packs
|
140
|
+
```
|
141
|
+
|
142
|
+
### Use a separate middleware
|
143
|
+
|
144
|
+
To serve static assets from the engine's `public/` folder you must add a middleware and point it to your engine's webpacker output path:
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
# application.rb
|
148
|
+
|
149
|
+
config.middleware.use(
|
150
|
+
"Rack::Static",
|
151
|
+
urls: ["/my-engine-packs"], root: "my_engine/public"
|
152
|
+
)
|
153
|
+
```
|
154
|
+
|
155
|
+
**NOTE:** in the example above we assume that your `public_output_path` is set to `my-engine-packs` in your engine's `webpacker.yml`.
|
data/docs/webpack.md
CHANGED
@@ -267,32 +267,36 @@ For the full configuration options of SplitChunks, see the [Webpack documentatio
|
|
267
267
|
// config/webpack/environment.js
|
268
268
|
const WebpackAssetsManifest = require('webpack-assets-manifest');
|
269
269
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
},
|
276
|
-
};
|
277
|
-
|
278
|
-
environment.config.merge(splitChunks);
|
279
|
-
|
280
|
-
// Should override the existing manifest plugin
|
281
|
-
environment.plugins.insert(
|
282
|
-
'Manifest',
|
283
|
-
new WebpackAssetsManifest({
|
284
|
-
entrypoints: true, // default in rails is false
|
285
|
-
writeToDisk: true, // rails defaults copied from webpacker
|
286
|
-
publicPath: true // rails defaults copied from webpacker
|
287
|
-
})
|
288
|
-
)
|
270
|
+
// Enable the default config
|
271
|
+
environment.splitChunks()
|
272
|
+
|
273
|
+
// or using custom config
|
274
|
+
environment.splitChunks((config) => Object.assign({}, config, { optimization: { splitChunks: false }}))
|
289
275
|
```
|
290
276
|
|
291
|
-
|
277
|
+
Then use, `javascript_packs_with_chunks_tag` helper to include all the transpiled
|
278
|
+
packs with the chunks in your view, which creates html tags for all the chunks.
|
292
279
|
|
293
280
|
```erb
|
294
|
-
|
295
|
-
|
281
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
|
282
|
+
|
283
|
+
<script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
284
|
+
<script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
285
|
+
<script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
286
|
+
<script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
287
|
+
<script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
288
|
+
```
|
289
|
+
|
290
|
+
**Important:** Pass all your pack names when using this helper otherwise you will
|
291
|
+
get duplicated chunks on the page.
|
292
|
+
|
293
|
+
```erb
|
294
|
+
<%# DO %>
|
295
|
+
<%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
|
296
|
+
|
297
|
+
<%# DON'T %>
|
298
|
+
<%= javascript_packs_with_chunks_tag 'calendar' %>
|
299
|
+
<%= javascript_packs_with_chunks_tag 'map' %>
|
296
300
|
```
|
297
301
|
|
298
302
|
For the old configuration with the CommonsChunkPlugin see below. **Note** that this functionality is deprecated in Webpack V4.
|
data/docs/yarn.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Yarn
|
2
2
|
|
3
|
-
Webpacker by default uses `yarn` as package manager for
|
3
|
+
Webpacker by default uses `yarn` as a package manager for `node_modules`
|
4
4
|
|
5
5
|
|
6
6
|
## Add a new npm module
|
@@ -10,3 +10,14 @@ To add any new JS module you can use `yarn`:
|
|
10
10
|
```bash
|
11
11
|
yarn add bootstrap material-ui
|
12
12
|
```
|
13
|
+
|
14
|
+
## Add an npm module to `devDependencies`
|
15
|
+
To add a new JS module that will only be available to local development:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
yarn add --dev browser-sync
|
19
|
+
```
|
20
|
+
|
21
|
+
Be careful not to add any build or app related JS modules in this fashion. Adding JS modules to `devDependencies` [will block them from being installed in **any** production environment](https://yarnpkg.com/lang/en/docs/cli/install/#toc-yarn-install-production-true-false).
|
22
|
+
|
23
|
+
Docs from JS modules may instruct you to use `--dev` or `devDependencies`, but this is generally under the assumption that you are using a `node.js` workflow.
|
@@ -3,6 +3,7 @@
|
|
3
3
|
default: &default
|
4
4
|
source_path: app/javascript
|
5
5
|
source_entry_path: packs
|
6
|
+
public_root_path: public
|
6
7
|
public_output_path: packs
|
7
8
|
cache_path: tmp/cache/webpacker
|
8
9
|
check_yarn_integrity: false
|
@@ -71,7 +72,7 @@ development:
|
|
71
72
|
headers:
|
72
73
|
'Access-Control-Allow-Origin': '*'
|
73
74
|
watch_options:
|
74
|
-
ignored:
|
75
|
+
ignored: '**/node_modules/**'
|
75
76
|
|
76
77
|
|
77
78
|
test:
|
@@ -10,7 +10,7 @@ module.exports = function(api) {
|
|
10
10
|
'Please specify a valid `NODE_ENV` or ' +
|
11
11
|
'`BABEL_ENV` environment variables. Valid values are "development", ' +
|
12
12
|
'"test", and "production". Instead, received: ' +
|
13
|
-
JSON.stringify(
|
13
|
+
JSON.stringify(currentEnv) +
|
14
14
|
'.'
|
15
15
|
)
|
16
16
|
}
|
data/lib/webpacker/compiler.rb
CHANGED
@@ -10,7 +10,7 @@ class Webpacker::Compiler
|
|
10
10
|
# Webpacker::Compiler.env['FRONTEND_API_KEY'] = 'your_secret_key'
|
11
11
|
cattr_accessor(:env) { {} }
|
12
12
|
|
13
|
-
delegate :config, :logger, to:
|
13
|
+
delegate :config, :logger, to: :webpacker
|
14
14
|
|
15
15
|
def initialize(webpacker)
|
16
16
|
@webpacker = webpacker
|
@@ -37,6 +37,8 @@ class Webpacker::Compiler
|
|
37
37
|
end
|
38
38
|
|
39
39
|
private
|
40
|
+
attr_reader :webpacker
|
41
|
+
|
40
42
|
def last_compilation_digest
|
41
43
|
compilation_digest_path.read if compilation_digest_path.exist? && config.public_manifest_path.exist?
|
42
44
|
rescue Errno::ENOENT, Errno::ENOTDIR
|
@@ -56,7 +58,11 @@ class Webpacker::Compiler
|
|
56
58
|
def run_webpack
|
57
59
|
logger.info "Compiling…"
|
58
60
|
|
59
|
-
stdout, sterr , status = Open3.capture3(
|
61
|
+
stdout, sterr , status = Open3.capture3(
|
62
|
+
webpack_env,
|
63
|
+
"#{RbConfig.ruby} ./bin/webpack",
|
64
|
+
chdir: File.expand_path(config.root_path)
|
65
|
+
)
|
60
66
|
|
61
67
|
if sterr == "" && status.success?
|
62
68
|
logger.info "Compiled all packs in #{config.public_output_path}"
|
@@ -71,17 +77,19 @@ class Webpacker::Compiler
|
|
71
77
|
def default_watched_paths
|
72
78
|
[
|
73
79
|
*config.resolved_paths_globbed,
|
74
|
-
"#{config.source_path.relative_path_from(
|
80
|
+
"#{config.source_path.relative_path_from(config.root_path)}/**/*",
|
75
81
|
"yarn.lock", "package.json",
|
76
82
|
"config/webpack/**/*"
|
77
83
|
].freeze
|
78
84
|
end
|
79
85
|
|
80
86
|
def compilation_digest_path
|
81
|
-
config.cache_path.join("last-compilation-digest-#{
|
87
|
+
config.cache_path.join("last-compilation-digest-#{webpacker.env}")
|
82
88
|
end
|
83
89
|
|
84
90
|
def webpack_env
|
91
|
+
return env unless defined?(ActionController::Base)
|
92
|
+
|
85
93
|
env.merge("WEBPACKER_ASSET_HOST" => ActionController::Base.helpers.compute_asset_host,
|
86
94
|
"WEBPACKER_RELATIVE_URL_ROOT" => ActionController::Base.relative_url_root)
|
87
95
|
end
|
data/lib/webpacker/dev_server.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class Webpacker::DevServer
|
2
|
+
DEFAULT_ENV_PREFIX = "WEBPACKER_DEV_SERVER".freeze
|
3
|
+
|
2
4
|
# Configure dev server connection timeout (in seconds), default: 0.01
|
3
5
|
# Webpacker.dev_server.connect_timeout = 1
|
4
6
|
cattr_accessor(:connect_timeout) { 0.01 }
|
@@ -49,9 +51,13 @@ class Webpacker::DevServer
|
|
49
51
|
fetch(:pretty)
|
50
52
|
end
|
51
53
|
|
54
|
+
def env_prefix
|
55
|
+
config.dev_server.fetch(:env_prefix, DEFAULT_ENV_PREFIX)
|
56
|
+
end
|
57
|
+
|
52
58
|
private
|
53
59
|
def fetch(key)
|
54
|
-
ENV["
|
60
|
+
ENV["#{env_prefix}_#{key.upcase}"] || config.dev_server.fetch(key, defaults[key])
|
55
61
|
end
|
56
62
|
|
57
63
|
def defaults
|
@@ -1,18 +1,25 @@
|
|
1
1
|
require "rack/proxy"
|
2
2
|
|
3
3
|
class Webpacker::DevServerProxy < Rack::Proxy
|
4
|
+
delegate :config, :dev_server, to: :@webpacker
|
5
|
+
|
6
|
+
def initialize(app = nil, opts = {})
|
7
|
+
@webpacker = opts.delete(:webpacker) || Webpacker.instance
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
4
11
|
def rewrite_response(response)
|
5
12
|
_status, headers, _body = response
|
6
13
|
headers.delete "transfer-encoding"
|
7
|
-
headers.delete "content-length" if
|
14
|
+
headers.delete "content-length" if dev_server.running? && dev_server.https?
|
8
15
|
response
|
9
16
|
end
|
10
17
|
|
11
18
|
def perform_request(env)
|
12
|
-
if env["PATH_INFO"].start_with?("/#{public_output_uri_path}") &&
|
13
|
-
env["HTTP_HOST"] = env["HTTP_X_FORWARDED_HOST"] = env["HTTP_X_FORWARDED_SERVER"] =
|
14
|
-
env["HTTP_X_FORWARDED_PROTO"] = env["HTTP_X_FORWARDED_SCHEME"] =
|
15
|
-
unless
|
19
|
+
if env["PATH_INFO"].start_with?("/#{public_output_uri_path}") && dev_server.running?
|
20
|
+
env["HTTP_HOST"] = env["HTTP_X_FORWARDED_HOST"] = env["HTTP_X_FORWARDED_SERVER"] = dev_server.host_with_port
|
21
|
+
env["HTTP_X_FORWARDED_PROTO"] = env["HTTP_X_FORWARDED_SCHEME"] = dev_server.protocol
|
22
|
+
unless dev_server.https?
|
16
23
|
env["HTTPS"] = env["HTTP_X_FORWARDED_SSL"] = "off"
|
17
24
|
end
|
18
25
|
env["SCRIPT_NAME"] = ""
|
@@ -25,6 +32,6 @@ class Webpacker::DevServerProxy < Rack::Proxy
|
|
25
32
|
|
26
33
|
private
|
27
34
|
def public_output_uri_path
|
28
|
-
|
35
|
+
config.public_output_path.relative_path_from(config.public_path)
|
29
36
|
end
|
30
37
|
end
|
data/lib/webpacker/helper.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
module Webpacker::Helper
|
2
|
+
# Returns current Webpacker instance.
|
3
|
+
# Could be overriden to use multiple Webpacker
|
4
|
+
# configurations within the same app (e.g. with engines)
|
5
|
+
def current_webpacker_instance
|
6
|
+
Webpacker.instance
|
7
|
+
end
|
8
|
+
|
2
9
|
# Computes the relative path for a given Webpacker asset.
|
3
|
-
# Return relative path using manifest.json and passes it to asset_path helper
|
10
|
+
# Return relative path using manifest.json and passes it to asset_path helper.
|
4
11
|
# This will use asset_path internally, so most of their behaviors will be the same.
|
5
12
|
#
|
6
13
|
# Example:
|
@@ -11,13 +18,13 @@ module Webpacker::Helper
|
|
11
18
|
# # When extract_css is true in webpacker.yml or the file is not a css:
|
12
19
|
# <%= asset_pack_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
|
13
20
|
def asset_pack_path(name, **options)
|
14
|
-
if
|
15
|
-
asset_path(
|
21
|
+
if current_webpacker_instance.config.extract_css? || !stylesheet?(name)
|
22
|
+
asset_path(current_webpacker_instance.manifest.lookup!(name), **options)
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
26
|
# Computes the absolute path for a given Webpacker asset.
|
20
|
-
# Return absolute path using manifest.json and passes it to asset_url helper
|
27
|
+
# Return absolute path using manifest.json and passes it to asset_url helper.
|
21
28
|
# This will use asset_url internally, so most of their behaviors will be the same.
|
22
29
|
#
|
23
30
|
# Example:
|
@@ -28,8 +35,8 @@ module Webpacker::Helper
|
|
28
35
|
# # When extract_css is true in webpacker.yml or the file is not a css:
|
29
36
|
# <%= asset_pack_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
|
30
37
|
def asset_pack_url(name, **options)
|
31
|
-
if
|
32
|
-
asset_url(
|
38
|
+
if current_webpacker_instance.config.extract_css? || !stylesheet?(name)
|
39
|
+
asset_url(current_webpacker_instance.manifest.lookup!(name), **options)
|
33
40
|
end
|
34
41
|
end
|
35
42
|
|
@@ -40,7 +47,7 @@ module Webpacker::Helper
|
|
40
47
|
# <%= image_pack_tag 'application.png', size: '16x10', alt: 'Edit Entry' %>
|
41
48
|
# <img alt='Edit Entry' src='/packs/application-k344a6d59eef8632c9d1.png' width='16' height='10' />
|
42
49
|
def image_pack_tag(name, **options)
|
43
|
-
image_tag(asset_path(
|
50
|
+
image_tag(asset_path(current_webpacker_instance.manifest.lookup!(name)), **options)
|
44
51
|
end
|
45
52
|
|
46
53
|
# Creates a script tag that references the named pack file, as compiled by webpack per the entries list
|
@@ -52,7 +59,29 @@ module Webpacker::Helper
|
|
52
59
|
# <%= javascript_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
53
60
|
# <script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
54
61
|
def javascript_pack_tag(*names, **options)
|
55
|
-
javascript_include_tag(*
|
62
|
+
javascript_include_tag(*sources_from_manifest_entries(names, type: :javascript), **options)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Creates script tags that references the chunks from entrypoints when using split chunks API,
|
66
|
+
# as compiled by webpack per the entries list in config/webpack/shared.js.
|
67
|
+
# By default, this list is auto-generated to match everything in
|
68
|
+
# app/javascript/packs/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
|
69
|
+
# See: https://webpack.js.org/plugins/split-chunks-plugin/
|
70
|
+
# Example:
|
71
|
+
#
|
72
|
+
# <%= javascript_packs_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %> # =>
|
73
|
+
# <script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
74
|
+
# <script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
75
|
+
# <script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
76
|
+
# <script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
77
|
+
# <script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
|
78
|
+
# DO:
|
79
|
+
# <%= javascript_packs_with_chunks_tag 'calendar', 'map' %>
|
80
|
+
# DON'T:
|
81
|
+
# <%= javascript_packs_with_chunks_tag 'calendar' %>
|
82
|
+
# <%= javascript_packs_with_chunks_tag 'map' %>
|
83
|
+
def javascript_packs_with_chunks_tag(*names, **options)
|
84
|
+
javascript_include_tag(*sources_from_manifest_entrypoints(names, type: :javascript), **options)
|
56
85
|
end
|
57
86
|
|
58
87
|
# Creates a link tag that references the named pack file, as compiled by webpack per the entries list
|
@@ -72,8 +101,8 @@ module Webpacker::Helper
|
|
72
101
|
# <%= stylesheet_pack_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
|
73
102
|
# <link rel="stylesheet" media="screen" href="/packs/calendar-1016838bab065ae1e122.css" data-turbolinks-track="reload" />
|
74
103
|
def stylesheet_pack_tag(*names, **options)
|
75
|
-
if
|
76
|
-
stylesheet_link_tag(*
|
104
|
+
if current_webpacker_instance.config.extract_css?
|
105
|
+
stylesheet_link_tag(*sources_from_manifest_entries(names, type: :stylesheet), **options)
|
77
106
|
end
|
78
107
|
end
|
79
108
|
|
@@ -82,7 +111,11 @@ module Webpacker::Helper
|
|
82
111
|
File.extname(name) == ".css"
|
83
112
|
end
|
84
113
|
|
85
|
-
def
|
86
|
-
names.map { |name|
|
114
|
+
def sources_from_manifest_entries(names, type:)
|
115
|
+
names.map { |name| current_webpacker_instance.manifest.lookup!(name, type: type) }.flatten
|
116
|
+
end
|
117
|
+
|
118
|
+
def sources_from_manifest_entrypoints(names, type:)
|
119
|
+
names.map { |name| current_webpacker_instance.manifest.lookup_pack_with_chunks!(name, type: type) }.flatten.uniq
|
87
120
|
end
|
88
121
|
end
|
data/lib/webpacker/manifest.rb
CHANGED
@@ -18,27 +18,33 @@ class Webpacker::Manifest
|
|
18
18
|
@data = load
|
19
19
|
end
|
20
20
|
|
21
|
+
def lookup_pack_with_chunks(name, pack_type = {})
|
22
|
+
compile if compiling?
|
23
|
+
|
24
|
+
manifest_pack_type = manifest_type(pack_type[:type])
|
25
|
+
manifest_pack_name = manifest_name(name, manifest_pack_type)
|
26
|
+
find("entrypoints")[manifest_pack_name][manifest_pack_type]
|
27
|
+
rescue NoMethodError
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def lookup_pack_with_chunks!(name, pack_type = {})
|
32
|
+
lookup_pack_with_chunks(name, pack_type) || handle_missing_entry(name)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Computes the relative path for a given Webpacker asset using manifest.json.
|
36
|
+
# If no asset is found, returns nil.
|
37
|
+
#
|
38
|
+
# Example:
|
39
|
+
#
|
40
|
+
# Webpacker.manifest.lookup('calendar.js') # => "/packs/calendar-1016838bab065ae1e122.js"
|
21
41
|
def lookup(name, pack_type = {})
|
22
42
|
compile if compiling?
|
23
43
|
|
24
|
-
|
25
|
-
# an extra object called "entrypoints". When the entrypoints key is not
|
26
|
-
# present in the manifest, or the name is not found in the entrypoints hash,
|
27
|
-
# it will raise a NoMethodError. If this happens, we should try to lookup
|
28
|
-
# a single instance of the pack based on the given name.
|
29
|
-
begin
|
30
|
-
manifest_pack_type = manifest_type(pack_type[:type])
|
31
|
-
manifest_pack_name = manifest_name(name, manifest_pack_type)
|
32
|
-
|
33
|
-
# Lookup the pack in the entrypoints of the manifest
|
34
|
-
find("entrypoints")[manifest_pack_name][manifest_pack_type]
|
35
|
-
rescue NoMethodError
|
36
|
-
|
37
|
-
# Lookup a single instance of the pack
|
38
|
-
find(full_pack_name(name, pack_type[:type]))
|
39
|
-
end
|
44
|
+
find(full_pack_name(name, pack_type[:type]))
|
40
45
|
end
|
41
46
|
|
47
|
+
# Like lookup, except that if no asset is found, raises a Webpacker::Manifest::MissingEntryError.
|
42
48
|
def lookup!(name, pack_type = {})
|
43
49
|
lookup(name, pack_type) || handle_missing_entry(name)
|
44
50
|
end
|
data/lib/webpacker/version.rb
CHANGED
@@ -20,6 +20,21 @@ describe('DevServer', () => {
|
|
20
20
|
expect(devServer.port).toEqual('5000')
|
21
21
|
})
|
22
22
|
|
23
|
+
test('with custom env prefix', () => {
|
24
|
+
const config = require('../config')
|
25
|
+
config.dev_server.env_prefix = 'TEST_WEBPACKER_DEV_SERVER_'
|
26
|
+
|
27
|
+
process.env.NODE_ENV = 'development'
|
28
|
+
process.env.RAILS_ENV = 'development'
|
29
|
+
process.env.TEST_WEBPACKER_DEV_SERVER_HOST = '0.0.0.0'
|
30
|
+
process.env.TEST_WEBPACKER_DEV_SERVER_PORT = 5000
|
31
|
+
|
32
|
+
const devServer = require('../dev_server')
|
33
|
+
expect(devServer).toBeDefined()
|
34
|
+
expect(devServer.host).toEqual('0.0.0.0')
|
35
|
+
expect(devServer.port).toEqual('5000')
|
36
|
+
})
|
37
|
+
|
23
38
|
test('with NODE_ENV and RAILS_ENV set to production', () => {
|
24
39
|
process.env.RAILS_ENV = 'production'
|
25
40
|
process.env.NODE_ENV = 'production'
|
data/package/config.js
CHANGED
@@ -19,7 +19,7 @@ const app = safeLoad(readFileSync(configPath), 'utf8')[railsEnv]
|
|
19
19
|
if (isArray(app.extensions) && app.extensions.length) delete defaults.extensions
|
20
20
|
|
21
21
|
const config = deepMerge(defaults, app)
|
22
|
-
config.outputPath = resolve(
|
22
|
+
config.outputPath = resolve(config.public_root_path, config.public_output_path)
|
23
23
|
|
24
24
|
// Ensure that the publicPath includes our asset host so dynamic imports
|
25
25
|
// (code-splitting chunks and static assets) load from the CDN instead of a relative path.
|
data/package/dev_server.js
CHANGED
@@ -9,8 +9,10 @@ const fetch = (key) => {
|
|
9
9
|
const devServerConfig = config.dev_server
|
10
10
|
|
11
11
|
if (devServerConfig) {
|
12
|
+
const envPrefix = config.dev_server.env_prefix || 'WEBPACKER_DEV_SERVER_'
|
13
|
+
|
12
14
|
Object.keys(devServerConfig).forEach((key) => {
|
13
|
-
const envValue = fetch(
|
15
|
+
const envValue = fetch(`${envPrefix}${key.toUpperCase().replace(/_/g, '')}`)
|
14
16
|
if (envValue !== undefined) devServerConfig[key] = envValue
|
15
17
|
})
|
16
18
|
}
|
@@ -9,7 +9,6 @@ module.exports = class extends Base {
|
|
9
9
|
|
10
10
|
if (devServer.hmr) {
|
11
11
|
this.plugins.append('HotModuleReplacement', new webpack.HotModuleReplacementPlugin())
|
12
|
-
this.plugins.append('NamedModules', new webpack.NamedModulesPlugin())
|
13
12
|
this.config.output.filename = '[name]-[hash].js'
|
14
13
|
}
|
15
14
|
|
data/package/utils/helpers.js
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
const { stringify } = require('flatted/cjs')
|
2
|
+
|
1
3
|
const isObject = value => typeof value === 'object'
|
2
4
|
&& value !== null
|
3
5
|
&& (value.length === undefined || value.length === null)
|
@@ -17,7 +19,7 @@ const isStrPath = (key) => {
|
|
17
19
|
|
18
20
|
const isArray = value => Array.isArray(value)
|
19
21
|
|
20
|
-
const isEqual = (target, source) =>
|
22
|
+
const isEqual = (target, source) => stringify(target) === stringify(source)
|
21
23
|
|
22
24
|
const canMerge = value => isObject(value) || isArray(value)
|
23
25
|
|
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@rails/webpacker",
|
3
|
-
"version": "4.0.0-rc.
|
3
|
+
"version": "4.0.0-rc.3",
|
4
4
|
"description": "Use webpack to manage app-like JavaScript modules in Rails",
|
5
5
|
"main": "package/index.js",
|
6
6
|
"files": [
|
@@ -29,6 +29,7 @@
|
|
29
29
|
"compression-webpack-plugin": "^2.0.0",
|
30
30
|
"css-loader": "^2.0.1",
|
31
31
|
"file-loader": "^2.0.0",
|
32
|
+
"flatted": "^2.0.0",
|
32
33
|
"glob": "^7.1.3",
|
33
34
|
"js-yaml": "^3.12.0",
|
34
35
|
"mini-css-extract-plugin": "^0.5.0",
|
data/test/configuration_test.rb
CHANGED
@@ -22,6 +22,15 @@ class ConfigurationTest < Webpacker::Test
|
|
22
22
|
def test_public_output_path
|
23
23
|
public_output_path = File.expand_path File.join(File.dirname(__FILE__), "test_app/public/packs").to_s
|
24
24
|
assert_equal @config.public_output_path.to_s, public_output_path
|
25
|
+
|
26
|
+
@config = Webpacker::Configuration.new(
|
27
|
+
root_path: @config.root_path,
|
28
|
+
config_path: Pathname.new(File.expand_path("./test_app/config/webpacker_public_root.yml", __dir__)),
|
29
|
+
env: "production"
|
30
|
+
)
|
31
|
+
|
32
|
+
public_output_path = File.expand_path File.join(File.dirname(__FILE__), "public/packs").to_s
|
33
|
+
assert_equal @config.public_output_path.to_s, public_output_path
|
25
34
|
end
|
26
35
|
|
27
36
|
def test_public_manifest_path
|
data/test/helper_test.rb
CHANGED
@@ -64,7 +64,7 @@ class HelperTest < ActionView::TestCase
|
|
64
64
|
%(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
|
65
65
|
%(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
|
66
66
|
%(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>),
|
67
|
-
|
67
|
+
javascript_packs_with_chunks_tag("application")
|
68
68
|
end
|
69
69
|
|
70
70
|
def test_stylesheet_pack_tag
|
data/test/manifest_test.rb
CHANGED
@@ -22,6 +22,10 @@ class ManifestTest < Minitest::Test
|
|
22
22
|
assert_nil Webpacker.manifest.lookup("foo.js")
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_lookup_chunks_nil
|
26
|
+
assert_nil Webpacker.manifest.lookup_pack_with_chunks("foo.js")
|
27
|
+
end
|
28
|
+
|
25
29
|
def test_lookup_success
|
26
30
|
assert_equal Webpacker.manifest.lookup("bootstrap.js"), "/packs/bootstrap-300631c4f0e0f9c865bc.js"
|
27
31
|
end
|
@@ -33,6 +37,6 @@ class ManifestTest < Minitest::Test
|
|
33
37
|
"/packs/application-k344a6d59eef8632c9d1.js"
|
34
38
|
]
|
35
39
|
|
36
|
-
assert_equal Webpacker.manifest.
|
40
|
+
assert_equal Webpacker.manifest.lookup_pack_with_chunks!("application", type: :javascript), application_entrypoints
|
37
41
|
end
|
38
42
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Note: You must restart bin/webpack-dev-server for changes to take effect
|
2
|
+
|
3
|
+
default: &default
|
4
|
+
public_root_path: ../public
|
5
|
+
|
6
|
+
development:
|
7
|
+
<<: *default
|
8
|
+
compile: true
|
9
|
+
|
10
|
+
test:
|
11
|
+
<<: *default
|
12
|
+
compile: true
|
13
|
+
public_output_path: packs-test
|
14
|
+
|
15
|
+
production:
|
16
|
+
<<: *default
|
17
|
+
compile: false
|
18
|
+
extract_css: true
|
19
|
+
cache_manifest: true
|
data/yarn.lock
CHANGED
@@ -3053,6 +3053,11 @@ flat-cache@^1.2.1:
|
|
3053
3053
|
rimraf "~2.6.2"
|
3054
3054
|
write "^0.2.1"
|
3055
3055
|
|
3056
|
+
flatted@^2.0.0:
|
3057
|
+
version "2.0.0"
|
3058
|
+
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
|
3059
|
+
integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
|
3060
|
+
|
3056
3061
|
flatten@^1.0.2:
|
3057
3062
|
version "1.0.2"
|
3058
3063
|
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpacker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.rc.
|
4
|
+
version: 4.0.0.rc.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- docs/css.md
|
94
94
|
- docs/deployment.md
|
95
95
|
- docs/docker.md
|
96
|
+
- docs/engines.md
|
96
97
|
- docs/env.md
|
97
98
|
- docs/es6.md
|
98
99
|
- docs/folder-structure.md
|
@@ -238,6 +239,7 @@ files:
|
|
238
239
|
- test/test_app/config/environment.rb
|
239
240
|
- test/test_app/config/webpack/development.js
|
240
241
|
- test/test_app/config/webpacker.yml
|
242
|
+
- test/test_app/config/webpacker_public_root.yml
|
241
243
|
- test/test_app/package.json
|
242
244
|
- test/test_app/public/packs/manifest.json
|
243
245
|
- test/test_app/yarn.lock
|
@@ -250,8 +252,8 @@ homepage: https://github.com/rails/webpacker
|
|
250
252
|
licenses:
|
251
253
|
- MIT
|
252
254
|
metadata:
|
253
|
-
source_code_uri: https://github.com/rails/webpacker/tree/v4.0.0.rc.
|
254
|
-
changelog_uri: https://github.com/rails/webpacker/blob/v4.0.0.rc.
|
255
|
+
source_code_uri: https://github.com/rails/webpacker/tree/v4.0.0.rc.3
|
256
|
+
changelog_uri: https://github.com/rails/webpacker/blob/v4.0.0.rc.3/CHANGELOG.md
|
255
257
|
post_install_message:
|
256
258
|
rdoc_options: []
|
257
259
|
require_paths:
|
@@ -291,6 +293,7 @@ test_files:
|
|
291
293
|
- test/test_app/config/environment.rb
|
292
294
|
- test/test_app/config/webpack/development.js
|
293
295
|
- test/test_app/config/webpacker.yml
|
296
|
+
- test/test_app/config/webpacker_public_root.yml
|
294
297
|
- test/test_app/package.json
|
295
298
|
- test/test_app/public/packs/manifest.json
|
296
299
|
- test/test_app/yarn.lock
|