webpack_manifest 0.2.3 → 0.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 05ba4c9fac1b820423d2ca2ee97138d66c4ee63211fbca761af32f6412779602
4
- data.tar.gz: 20ceb3a78be00f2e5f9e798737a6437e6446393e5f18037cd369b8024d569ce4
2
+ SHA1:
3
+ metadata.gz: 3c84129d2cae2ae37bbae7b815e1ab134a6c2888
4
+ data.tar.gz: 40d2d9570f9c4062217e458fe611b1236448663d
5
5
  SHA512:
6
- metadata.gz: 02daf66500053b50f1afc8cc780c8bc1dbf82c0dbb5847a77f9e06e778a5bf230a2958aa366b4f4e50cd7babb95f14540e63341413e0fb26cd17397d7d096462
7
- data.tar.gz: a4c262cf3f7c48487e4f95c1646a646c466f50ead4477926263e190c8870abf0ee2cb54e8af6a2dcb82cf2fed6397d32820b1c8fb753e1a2284cdee2b3e3cb1a
6
+ metadata.gz: f346cc44f955707241a230d7ee70a0b89b2b96e171c595811d8a61259bfb8e7228d5242fee13b2effb6ed45e72c6a12ac407d722c44123d36c71d847d7ca0add
7
+ data.tar.gz: e0a0c11b1ac4c5cda1b06592f5e6a8e4ac5c95922161aa07e3831cec2a58a353cd30398adc03943860359787d1ee983941ca785070bfdca84b32e36b73ea17c4
@@ -1,3 +1,9 @@
1
+ # 0.2.4 / 2019-03-25
2
+
3
+ ## Enhancements:
4
+
5
+ * Added `javascript_bundles_with_chunks_tag` and `stylesheet_bundles_with_chunks_tag` helpers, which creates html tags for a pack and all the dependent chunks, when using splitChunks. (#7)
6
+
1
7
  # 0.2.3 / 2018-11-18
2
8
 
3
9
  * Support passing symbols to helper methods (#5) by @jmortlock
data/README.md CHANGED
@@ -104,6 +104,54 @@ image_bundle_tag "icon.png", size: "16x10", alt: "Edit Entry"
104
104
  height="10" alt="Edit Entry" />
105
105
  ```
106
106
 
107
+
108
+ #### `javascript_bundles_with_chunks_tag` and `stylesheet_bundles_with_chunks_tag`
109
+
110
+ **Experimental** These are the helpers, which are similar to Webpacker, to support `splitChunks` feature introduced since Webpack 4.
111
+
112
+ For the full configuration options of splitChunks, see the Webpack's [documentation](https://webpack.js.org/plugins/split-chunks-plugin/).
113
+
114
+ Then use the `javascript_bundles_with_chunks_tag` and `stylesheet_bundles_with_chunks_tag` helpers to include all
115
+ the transpiled packs with the chunks in your view, which creates html tags for all the chunks.
116
+
117
+ ```
118
+ <%= javascript_bundles_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %>
119
+
120
+ <!-- Creates the following: -->
121
+ <script src="/packs/vendor-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
122
+ <script src="/packs/calendar~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
123
+ <script src="/packs/calendar-1016838bab065ae1e314.js" data-turbolinks-track="reload"></script>
124
+ <script src="/packs/map~runtime-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
125
+ <script src="/packs/map-16838bab065ae1e314.js" data-turbolinks-track="reload"></script>
126
+ ```
127
+
128
+ **Important:** Pass all your pack names to the helper otherwise you will get duplicated chunks on the page.
129
+
130
+ ```
131
+ <%# DO %>
132
+ <%= javascript_bundles_with_chunks_tag 'calendar', 'map' %>
133
+
134
+ <%# DON'T %>
135
+ <%= javascript_bundles_with_chunks_tag 'calendar' %>
136
+ <%= javascript_bundles_with_chunks_tag 'map' %>
137
+ ```
138
+
139
+ **Important:** Also, these helpers do not work with `webpack-manifest-plugin` npm because it has no support to generate a manifest with a set of of chunk entries https://github.com/danethurber/webpack-manifest-plugin/issues/133. Instead, [webpack-assets-manifest](https://github.com/webdeveric/webpack-assets-manifest) npm supports. Please change the plugin for manifest file generation if you wish to enable `splitChunks` feature.
140
+
141
+ ```
142
+ const WebpackAssetsManifest = require('webpack-assets-manifest');
143
+
144
+ module.exports = {
145
+ // ...
146
+ plugins: [
147
+ new WebpackAssetsManifest({
148
+ entrypoints: true, // Please set this as true
149
+ })
150
+ ],
151
+ // ...
152
+ }
153
+ ```
154
+
107
155
  ## Advanced Configuration
108
156
 
109
157
  ### Hot Module Replacement in development
@@ -177,7 +225,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
177
225
 
178
226
  ## Contributing
179
227
 
180
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/webpack_manifest.
228
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nikushi/webpack_manifest.
181
229
 
182
230
  ## License
183
231
 
@@ -17,6 +17,12 @@ module WebpackManifest
17
17
  @cache = cache
18
18
  end
19
19
 
20
+ def lookup_pack_with_chunks!(name, type: nil)
21
+ manifest_pack_type = manifest_type(name, type)
22
+ manifest_pack_name = manifest_name(name, manifest_pack_type)
23
+ find('entrypoints')&.dig(manifest_pack_name, manifest_pack_type) || handle_missing_entry(name)
24
+ end
25
+
20
26
  def lookup!(name)
21
27
  find(name) || handle_missing_entry(name)
22
28
  end
@@ -56,6 +62,19 @@ module WebpackManifest
56
62
  JSON.parse(data)
57
63
  end
58
64
 
65
+ # The `manifest_name` method strips of the file extension of the name, because in the
66
+ # manifest hash the entrypoints are defined by their pack name without the extension.
67
+ # When the user provides a name with a file extension, we want to try to strip it off.
68
+ def manifest_name(name, pack_type)
69
+ return name if File.extname(name.to_s).empty?
70
+ File.basename(name, '.' + pack_type)
71
+ end
72
+
73
+ def manifest_type(name, pack_type)
74
+ return File.extname(name)[1..-1] if pack_type.nil?
75
+ pack_type.to_s
76
+ end
77
+
59
78
  def handle_missing_entry(name)
60
79
  raise MissingEntryError, <<~MSG
61
80
  Can not find #{name} in #{@path}.
@@ -23,6 +23,25 @@ module WebpackManifest::Rails::Helper
23
23
  javascript_include_tag(*sources_from_manifest(names, 'js', key: manifest), **options)
24
24
  end
25
25
 
26
+ # Creates script tags that references the js chunks from entrypoints when using split chunks API.
27
+ # See: https://webpack.js.org/plugins/split-chunks-plugin/
28
+ # Example:
29
+ #
30
+ # <%= javascript_bundles_with_chunks_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %> # =>
31
+ # <script src="/packs/vendor-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
32
+ # <script src="/packs/calendar~runtime-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
33
+ # <script src="/packs/calendar-1016838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
34
+ # <script src="/packs/map~runtime-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
35
+ # <script src="/packs/map-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
36
+ # DO:
37
+ # <%= javascript_bundles_with_chunks_tag 'calendar', 'map' %>
38
+ # DON'T:
39
+ # <%= javascript_bundles_with_chunks_tag 'calendar' %>
40
+ # <%= javascript_bundles_with_chunks_tag 'map' %>
41
+ def javascript_bundles_with_chunks_tag(*names, manifest: nil, **options)
42
+ javascript_include_tag(*sources_from_manifest_entrypoints(names, 'js', key: manifest), **options)
43
+ end
44
+
26
45
  # Examples:
27
46
  #
28
47
  # <%= stylesheet_bundle_tag 'calendar', 'data-turbolinks-track': 'reload' %> # =>
@@ -36,6 +55,23 @@ module WebpackManifest::Rails::Helper
36
55
  stylesheet_link_tag(*sources_from_manifest(names, 'css', key: manifest), **options)
37
56
  end
38
57
 
58
+ # Creates link tags that references the css chunks from entrypoints when using split chunks API.
59
+ # See: https://webpack.js.org/plugins/split-chunks-plugin/
60
+ # Example:
61
+ #
62
+ # <%= stylesheet_bundles_with_chunks_tag 'calendar', 'map' %> # =>
63
+ # <link rel="stylesheet" media="screen" href="/packs/3-8c7ce31a.chunk.css" />
64
+ # <link rel="stylesheet" media="screen" href="/packs/calendar-8c7ce31a.chunk.css" />
65
+ # <link rel="stylesheet" media="screen" href="/packs/map-8c7ce31a.chunk.css" />
66
+ # DO:
67
+ # <%= stylesheet_bundles_with_chunks_tag 'calendar', 'map' %>
68
+ # DON'T:
69
+ # <%= stylesheet_bundles_with_chunks_tag 'calendar' %>
70
+ # <%= stylesheet_bundles_with_chunks_tag 'map' %>
71
+ def stylesheet_bundles_with_chunks_tag(*names, manifest: nil, **options)
72
+ stylesheet_link_tag(*sources_from_manifest_entrypoints(names, 'css', key: manifest), **options)
73
+ end
74
+
39
75
  # Examples:
40
76
  #
41
77
  # <%= image_bundle_tag 'icon.png'
@@ -55,6 +91,11 @@ module WebpackManifest::Rails::Helper
55
91
  names.map { |name| manifest.lookup!(name.to_s + '.' + ext) }
56
92
  end
57
93
 
94
+ def sources_from_manifest_entrypoints(names, type, key: nil)
95
+ manifest = get_manifest_by_key(key)
96
+ names.map { |name| manifest.lookup_pack_with_chunks!(name, type: type) }.flatten.uniq
97
+ end
98
+
58
99
  def get_manifest_by_key(key = nil)
59
100
  repository = WebpackManifest::Rails.configuration.manifests
60
101
  key.nil? ? repository.default : repository.get(key)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WebpackManifest
4
- VERSION = "0.2.3"
4
+ VERSION = "0.2.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpack_manifest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobuhiro Nikushi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-18 00:00:00.000000000 Z
11
+ date: 2019-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.7.7
109
+ rubygems_version: 2.6.8
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: WebpackManifest is a gem that integrates Rails with npm's webpack-manifest-plugin