webpacker 4.0.0.rc.2 → 4.0.0.rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|