webpacker 4.2.0 → 4.2.1

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
2
  SHA256:
3
- metadata.gz: 4bcfdcad6251b8aaa5e5687a3f16b498faf3ca8aae0615fddf75113194031eed
4
- data.tar.gz: 97acb9d68194424e88e9818e91c07e6b9289f42540ca11f35be4f51899b320c0
3
+ metadata.gz: d57c77fb839f38501e9c45ed502a196d618ce449d325c733f90ae95da4d53614
4
+ data.tar.gz: e978c0e6a5f9e00c065d01114f610095d8ff8677e4de210919b9b537b9a9ef24
5
5
  SHA512:
6
- metadata.gz: 3a35dae1dd158f276296a7b23c8f2ea5243e30ed779fd8295e52b7a00a184dfad71b1e811101e183a8798a32c329ddc89881f6206b00ffcd2ce33941be060568
7
- data.tar.gz: 7fbc1d41d61b2b11aab7dd47859d2b407fc7617f0e2eee177ea2178c21dfdb25884017bb61b144aa55112241644bdbb4e2ca1c81b98ee41ff9b1ab7d93bdddbf
6
+ metadata.gz: 17bc7a08a4d9acb876d720d03fcdfd43a64aab320c54924d2067107e5bab372f2abaddc6cb9704f334ef5aebc0c2259afbe3335a84ea62d07d98e4fd456609bc
7
+ data.tar.gz: 3bf0e8243fd43852c02bde42fe8ab20cdeaf1cb9e7f7a2a51d0cfe9b2aa0e1fad8ab03c596764f0c5de7109558676e0f8a3be94f8de880c27a2d18de9d9df6bf
@@ -2,6 +2,10 @@
2
2
 
3
3
  **Please note that Webpacker 4.1.0 has an installer bug. Please use 4.2.0 or above**
4
4
 
5
+ ## [[4.2.1]](https://github.com/rails/webpacker/compare/v4.1.0...v4.2.0) - 2019-12-09
6
+
7
+ - Fixed issue with webpack clean task [#2389](https://github.com/rails/webpacker/pull/2389)
8
+
5
9
  ## [[4.2.0]](https://github.com/rails/webpacker/compare/v4.1.0...v4.2.0) - 2019-11-12
6
10
 
7
11
  - Fixed installer bug [#2366](https://github.com/rails/webpacker/pull/2366)
@@ -49,14 +53,14 @@ Please see the diff
49
53
  In each of your `/packs/*.js` files, change this:
50
54
 
51
55
  ```js
52
- import "@babel/polyfill";
56
+ import '@babel/polyfill'
53
57
  ```
54
58
 
55
59
  to this:
56
60
 
57
61
  ```js
58
- import "core-js/stable";
59
- import "regenerator-runtime/runtime";
62
+ import 'core-js/stable'
63
+ import 'regenerator-runtime/runtime'
60
64
  ```
61
65
 
62
66
  Don't forget to install those dependencies directly!
@@ -93,10 +97,10 @@ Source maps can be disabled in any environment configuration, e.g:
93
97
  ```js
94
98
  // config/webpack/production.js
95
99
 
96
- const environment = require("./environment");
97
- environment.config.merge({ devtool: "none" });
100
+ const environment = require('./environment')
101
+ environment.config.merge({ devtool: 'none' })
98
102
 
99
- module.exports = environment.toWebpackConfig();
103
+ module.exports = environment.toWebpackConfig()
100
104
  ```
101
105
 
102
106
  - Reintroduced `context` to the file loader. Reverting the simpler paths change
@@ -147,12 +151,12 @@ To get old behaviour:
147
151
  ```js
148
152
  // config/webpack/environment.js
149
153
 
150
- const { environment, config } = require("@rails/webpacker");
151
- const { join } = require("path");
154
+ const { environment, config } = require('@rails/webpacker')
155
+ const { join } = require('path')
152
156
 
153
- const fileLoader = environment.loaders.get("file");
154
- fileLoader.use[0].options.name = "[path][name]-[hash].[ext]";
155
- fileLoader.use[0].options.context = join(config.source_path); // optional if you don't want to expose full paths
157
+ const fileLoader = environment.loaders.get('file')
158
+ fileLoader.use[0].options.name = '[path][name]-[hash].[ext]'
159
+ fileLoader.use[0].options.context = join(config.source_path) // optional if you don't want to expose full paths
156
160
  ```
157
161
 
158
162
  ### Added
@@ -246,7 +250,7 @@ helper otherwise you will get duplicated chunks on the page.
246
250
  depending on how you want to process packs [#1823](https://github.com/rails/webpacker/pull/1823)
247
251
 
248
252
  ```js
249
- environment.loaders.prepend();
253
+ environment.loaders.prepend()
250
254
  ```
251
255
 
252
256
  - Separate CSS extraction from build environment [#1625](https://github.com/rails/webpacker/pull/1625)
@@ -281,13 +285,13 @@ static_assets_extensions:
281
285
  - Add split chunks api (undocumented)
282
286
 
283
287
  ```js
284
- const { environment } = require("@rails/webpacker");
288
+ const { environment } = require('@rails/webpacker')
285
289
  // Enable with default config
286
- environment.splitChunks();
290
+ environment.splitChunks()
287
291
  // Configure via a callback
288
292
  environment.splitChunks(config =>
289
293
  Object.assign({}, config, { optimization: { splitChunks: false } })
290
- );
294
+ )
291
295
  ```
292
296
 
293
297
  - Allow changing static file extensions using webpacker.yml (undocumented)
@@ -418,12 +422,12 @@ bundle exec rails webpacker:binstubs
418
422
 
419
423
  ```js
420
424
  // config/webpack/environment.js
421
- const { environment } = require("@rails/webpacker");
425
+ const { environment } = require('@rails/webpacker')
422
426
 
423
- environment.loaders.append("json", {
427
+ environment.loaders.append('json', {
424
428
  test: /\.json$/,
425
- use: "json-loader"
426
- });
429
+ use: 'json-loader'
430
+ })
427
431
  ```
428
432
 
429
433
  ### Fixed
@@ -490,17 +494,17 @@ into your `config/webpack/loaders/`
490
494
  directory and add it to webpack build from `config/webpack/environment.js`
491
495
 
492
496
  ```js
493
- const erb = require("./loaders/erb");
494
- const elm = require("./loaders/elm");
495
- const typescript = require("./loaders/typescript");
496
- const vue = require("./loaders/vue");
497
- const coffee = require("./loaders/coffee");
497
+ const erb = require('./loaders/erb')
498
+ const elm = require('./loaders/elm')
499
+ const typescript = require('./loaders/typescript')
500
+ const vue = require('./loaders/vue')
501
+ const coffee = require('./loaders/coffee')
498
502
 
499
- environment.loaders.append("coffee", coffee);
500
- environment.loaders.append("vue", vue);
501
- environment.loaders.append("typescript", typescript);
502
- environment.loaders.append("elm", elm);
503
- environment.loaders.append("erb", erb);
503
+ environment.loaders.append('coffee', coffee)
504
+ environment.loaders.append('vue', vue)
505
+ environment.loaders.append('typescript', typescript)
506
+ environment.loaders.append('elm', elm)
507
+ environment.loaders.append('erb', erb)
504
508
  ```
505
509
 
506
510
  In `.postcssrc.yml` you need to change the plugin name from `postcss-smart-import` to `postcss-import`:
@@ -553,15 +557,15 @@ bundle exec rails webpacker:install:coffee
553
557
  - Expose base config from environment
554
558
 
555
559
  ```js
556
- environment.config.set("resolve.extensions", [".foo", ".bar"]);
557
- environment.config.set("output.filename", "[name].js");
558
- environment.config.delete("output.chunkFilename");
559
- environment.config.get("resolve");
560
+ environment.config.set('resolve.extensions', ['.foo', '.bar'])
561
+ environment.config.set('output.filename', '[name].js')
562
+ environment.config.delete('output.chunkFilename')
563
+ environment.config.get('resolve')
560
564
  environment.config.merge({
561
565
  output: {
562
- filename: "[name].js"
566
+ filename: '[name].js'
563
567
  }
564
- });
568
+ })
565
569
  ```
566
570
 
567
571
  - Expose new API's for loaders and plugins to insert at position
@@ -570,34 +574,34 @@ environment.config.merge({
570
574
  const jsonLoader = {
571
575
  test: /\.json$/,
572
576
  exclude: /node_modules/,
573
- loader: "json-loader"
574
- };
577
+ loader: 'json-loader'
578
+ }
575
579
 
576
- environment.loaders.append("json", jsonLoader);
577
- environment.loaders.prepend("json", jsonLoader);
578
- environment.loaders.insert("json", jsonLoader, { after: "style" });
579
- environment.loaders.insert("json", jsonLoader, { before: "babel" });
580
+ environment.loaders.append('json', jsonLoader)
581
+ environment.loaders.prepend('json', jsonLoader)
582
+ environment.loaders.insert('json', jsonLoader, { after: 'style' })
583
+ environment.loaders.insert('json', jsonLoader, { before: 'babel' })
580
584
 
581
585
  // Update a plugin
582
- const manifestPlugin = environment.plugins.get("Manifest");
583
- manifestPlugin.opts.writeToFileEmit = false;
586
+ const manifestPlugin = environment.plugins.get('Manifest')
587
+ manifestPlugin.opts.writeToFileEmit = false
584
588
 
585
589
  // Update coffee loader to use coffeescript 2
586
- const babelLoader = environment.loaders.get("babel");
590
+ const babelLoader = environment.loaders.get('babel')
587
591
  environment.loaders.insert(
588
- "coffee",
592
+ 'coffee',
589
593
  {
590
594
  test: /\.coffee(\.erb)?$/,
591
- use: babelLoader.use.concat(["coffee-loader"])
595
+ use: babelLoader.use.concat(['coffee-loader'])
592
596
  },
593
- { before: "json" }
594
- );
597
+ { before: 'json' }
598
+ )
595
599
  ```
596
600
 
597
601
  - Expose `resolve.modules` paths like loaders and plugins
598
602
 
599
603
  ```js
600
- environment.resolvedModules.append("vendor", "vendor");
604
+ environment.resolvedModules.append('vendor', 'vendor')
601
605
  ```
602
606
 
603
607
  - Enable sourcemaps in `style` and `css` loader
@@ -608,13 +612,13 @@ environment.resolvedModules.append("vendor", "vendor");
608
612
 
609
613
  ```js
610
614
  // Enable css modules with sass loader
611
- const sassLoader = environment.loaders.get("sass");
612
- const cssLoader = sassLoader.use.find(loader => loader.loader === "css-loader");
615
+ const sassLoader = environment.loaders.get('sass')
616
+ const cssLoader = sassLoader.use.find(loader => loader.loader === 'css-loader')
613
617
 
614
618
  cssLoader.options = Object.assign({}, cssLoader.options, {
615
619
  modules: true,
616
- localIdentName: "[path][name]__[local]--[hash:base64:5]"
617
- });
620
+ localIdentName: '[path][name]__[local]--[hash:base64:5]'
621
+ })
618
622
  ```
619
623
 
620
624
  - Expose rest of configurable dev server options from webpacker.yml
@@ -622,7 +626,7 @@ cssLoader.options = Object.assign({}, cssLoader.options, {
622
626
  ```yml
623
627
  quiet: false
624
628
  headers:
625
- "Access-Control-Allow-Origin": "*"
629
+ 'Access-Control-Allow-Origin': '*'
626
630
  watch_options:
627
631
  ignored: /node_modules/
628
632
  ```
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- webpacker (4.2.0)
4
+ webpacker (4.2.1)
5
5
  activesupport (>= 4.2)
6
6
  rack-proxy (>= 0.6.1)
7
7
  railties (>= 4.2)
@@ -36,7 +36,7 @@ end
36
36
 
37
37
  if Webpacker::VERSION =~ /^[0-9]+\.[0-9]+\.[0-9]+$/
38
38
  say "Installing all JavaScript dependencies [#{Webpacker::VERSION}]"
39
- run "yarn add @rails/webpacker"
39
+ run "yarn add @rails/webpacker@#{Webpacker::VERSION}"
40
40
  else
41
41
  say "Installing all JavaScript dependencies [from prerelease rails/webpacker]"
42
42
  run "yarn add @rails/webpacker@next"
@@ -1,9 +1,13 @@
1
+ $stdout.sync = true
2
+
1
3
  require "webpacker/configuration"
2
4
 
3
5
  namespace :webpacker do
4
6
  desc "Remove old compiled webpacks"
5
7
  task :clean, [:keep] => ["webpacker:verify_install", :environment] do |_, args|
6
- Webpacker.clean(Integer(args.keep || 2))
8
+ Webpacker.ensure_log_goes_to_stdout do
9
+ Webpacker.clean(Integer(args.keep || 2))
10
+ end
7
11
  end
8
12
  end
9
13
 
@@ -1,13 +1,5 @@
1
1
  $stdout.sync = true
2
2
 
3
- def ensure_log_goes_to_stdout
4
- old_logger = Webpacker.logger
5
- Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
6
- yield
7
- ensure
8
- Webpacker.logger = old_logger
9
- end
10
-
11
3
  def yarn_install_available?
12
4
  rails_major = Rails::VERSION::MAJOR
13
5
  rails_minor = Rails::VERSION::MINOR
@@ -27,7 +19,7 @@ namespace :webpacker do
27
19
  desc "Compile JavaScript packs using webpack for production with digests"
28
20
  task compile: ["webpacker:verify_install", :environment] do
29
21
  Webpacker.with_node_env(ENV.fetch("NODE_ENV", "production")) do
30
- ensure_log_goes_to_stdout do
22
+ Webpacker.ensure_log_goes_to_stdout do
31
23
  if Webpacker.compile
32
24
  # Successful compilation!
33
25
  else
@@ -22,6 +22,14 @@ module Webpacker
22
22
  ENV["NODE_ENV"] = original
23
23
  end
24
24
 
25
+ def ensure_log_goes_to_stdout
26
+ old_logger = Webpacker.logger
27
+ Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
28
+ yield
29
+ ensure
30
+ Webpacker.logger = old_logger
31
+ end
32
+
25
33
  delegate :logger, :logger=, :env, to: :instance
26
34
  delegate :config, :compiler, :manifest, :commands, :dev_server, to: :instance
27
35
  delegate :bootstrap, :clean, :clobber, :compile, to: :commands
@@ -1,25 +1,19 @@
1
1
  class Webpacker::Commands
2
- delegate :config, :compiler, :manifest, to: :@webpacker
2
+ delegate :config, :compiler, :manifest, :logger, to: :@webpacker
3
3
 
4
4
  def initialize(webpacker)
5
5
  @webpacker = webpacker
6
6
  end
7
7
 
8
- def clean(count_to_keep = 2)
9
- if config.public_output_path.exist? && config.public_manifest_path.exist?
10
- files_in_manifest = process_manifest_hash(manifest.refresh)
11
- files_to_be_removed = files_in_manifest.flat_map do |file_in_manifest|
12
- file_prefix, file_ext = file_in_manifest.scan(/(.*)[0-9a-f]{20}(.*)/).first
13
- versions_of_file = Dir.glob("#{file_prefix}*#{file_ext}").grep(/#{file_prefix}[0-9a-f]{20}#{file_ext}/)
14
- versions_of_file.map do |version_of_file|
15
- next if version_of_file == file_in_manifest
16
-
17
- [version_of_file, File.mtime(version_of_file).utc.to_i]
18
- end.compact.sort_by(&:last).reverse.drop(count_to_keep).map(&:first)
8
+ def clean(count = 2)
9
+ if config.public_output_path.exist? && config.public_manifest_path.exist? && versions.count > count
10
+ versions.drop(count).flat_map(&:last).each do |file|
11
+ File.delete(file) if File.exist?(file)
12
+ logger.info "Removed #{file}"
19
13
  end
20
-
21
- files_to_be_removed.each { |f| File.delete f }
22
14
  end
15
+
16
+ true
23
17
  end
24
18
 
25
19
  def clobber
@@ -38,11 +32,19 @@ class Webpacker::Commands
38
32
  end
39
33
 
40
34
  private
41
- def process_manifest_hash(manifest_hash)
42
- manifest_hash.values.map do |value|
43
- next process_manifest_hash(value) if value.is_a?(Hash)
35
+ def versions
36
+ all_files = Dir.glob("#{config.public_output_path}/**/*")
37
+ manifest_config = Dir.glob("#{config.public_manifest_path}*")
38
+
39
+ packs = all_files - manifest_config - current_version
40
+ packs.group_by { |file| File.mtime(file).utc.to_i }.sort.reverse
41
+ end
42
+
43
+ def current_version
44
+ manifest.refresh.values.map do |value|
45
+ next if value.is_a?(Hash)
44
46
 
45
47
  File.join(config.root_path, "public", value)
46
- end.flatten
48
+ end.compact
47
49
  end
48
50
  end
@@ -1,4 +1,4 @@
1
1
  module Webpacker
2
2
  # Change the version in package.json too, please!
3
- VERSION = "4.2.0".freeze
3
+ VERSION = "4.2.1".freeze
4
4
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rails/webpacker",
3
- "version": "4.2.0",
3
+ "version": "4.2.1",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "main": "package/index.js",
6
6
  "files": [
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.2.0
4
+ version: 4.2.1
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: 2019-11-12 00:00:00.000000000 Z
12
+ date: 2019-12-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -287,8 +287,8 @@ homepage: https://github.com/rails/webpacker
287
287
  licenses:
288
288
  - MIT
289
289
  metadata:
290
- source_code_uri: https://github.com/rails/webpacker/tree/v4.2.0
291
- changelog_uri: https://github.com/rails/webpacker/blob/v4.2.0/CHANGELOG.md
290
+ source_code_uri: https://github.com/rails/webpacker/tree/v4.2.1
291
+ changelog_uri: https://github.com/rails/webpacker/blob/v4.2.1/CHANGELOG.md
292
292
  post_install_message:
293
293
  rdoc_options: []
294
294
  require_paths: