webpacker 6.0.0.rc.1 → 6.0.0.rc.6

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.
@@ -12,41 +12,43 @@ let devConfig = {
12
12
  }
13
13
 
14
14
  if (runningWebpackDevServer) {
15
- if (devServer.hmr) {
16
- devConfig = merge(devConfig, {
17
- output: { filename: '[name]-[hash].js' }
18
- })
15
+ const liveReload = devServer.live_reload !== undefined ? devServer.live_reload : !devServer.hmr
16
+
17
+ const devServerConfig = {
18
+ devMiddleware: {
19
+ publicPath
20
+ },
21
+ compress: devServer.compress,
22
+ allowedHosts: devServer.allowed_hosts,
23
+ host: devServer.host,
24
+ port: devServer.port,
25
+ https: devServer.https,
26
+ hot: devServer.hmr,
27
+ liveReload,
28
+ historyApiFallback: { disableDotRule: true },
29
+ headers: devServer.headers,
30
+ static: {
31
+ publicPath: contentBase
32
+ }
33
+ }
34
+
35
+ if (devServer.static) {
36
+ devServerConfig.static = { ...devServerConfig.static, ...devServer.static }
37
+ }
38
+
39
+ if (devServer.client) {
40
+ devServerConfig.client = devServer.client
19
41
  }
20
42
 
21
43
  devConfig = merge(devConfig, {
22
- devServer: {
23
- clientLogLevel: 'none',
24
- compress: devServer.compress,
25
- quiet: devServer.quiet,
26
- disableHostCheck: devServer.disable_host_check,
27
- host: devServer.host,
28
- port: devServer.port,
29
- https: devServer.https,
30
- hot: devServer.hmr,
31
- contentBase,
32
- inline: devServer.inline || devServer.hmr,
33
- injectClient: devServer.hmr,
34
- injectHot: devServer.hmr,
35
- useLocalIp: devServer.use_local_ip,
36
- public: devServer.public,
37
- publicPath,
38
- historyApiFallback: { disableDotRule: true },
39
- headers: devServer.headers,
40
- overlay: devServer.overlay,
41
- stats: {
42
- colors: true,
43
- entrypoints: false,
44
- errorDetails: true,
45
- modules: false,
46
- moduleTrace: false
47
- },
48
- watchOptions: devServer.watch_options
49
- }
44
+ stats: {
45
+ colors: true,
46
+ entrypoints: false,
47
+ errorDetails: true,
48
+ modules: false,
49
+ moduleTrace: false
50
+ },
51
+ devServer: devServerConfig
50
52
  })
51
53
  }
52
54
 
@@ -18,6 +18,6 @@ module.exports = {
18
18
  exclude: [/\.(js|mjs|jsx|ts|tsx)$/],
19
19
  type: 'asset/resource',
20
20
  generator: {
21
- filename: 'static/[hash][ext][query]'
21
+ filename: 'static/[name]-[hash][ext][query]'
22
22
  }
23
23
  }
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rails/webpacker",
3
- "version": "6.0.0-rc.1",
3
+ "version": "6.0.0-rc.6",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "main": "package/index.js",
6
6
  "files": [
@@ -8,36 +8,36 @@
8
8
  "lib/install/config/webpacker.yml"
9
9
  ],
10
10
  "engines": {
11
- "node": "^12 || >=14",
11
+ "node": ">= 12.13.0 || >=14",
12
12
  "yarn": ">=1 <4"
13
13
  },
14
14
  "dependencies": {
15
- "@babel/core": "^7.15.0",
15
+ "@babel/core": "^7.15.5",
16
16
  "@babel/plugin-proposal-class-properties": "^7.14.5",
17
17
  "@babel/plugin-transform-runtime": "^7.15.0",
18
- "@babel/preset-env": "^7.15.0",
19
- "@babel/runtime": "^7.15.3",
18
+ "@babel/preset-env": "^7.15.6",
19
+ "@babel/runtime": "^7.15.4",
20
20
  "babel-loader": "^8.2.2",
21
- "compression-webpack-plugin": "^7.1.2",
22
- "glob": "^7.1.7",
23
- "js-yaml": "^3.14.1",
21
+ "compression-webpack-plugin": "^9.0.0",
22
+ "glob": "^7.2.0",
23
+ "js-yaml": "^4.1.0",
24
24
  "path-complete-extname": "^1.0.0",
25
25
  "pnp-webpack-plugin": "^1.7.0",
26
- "terser-webpack-plugin": "^5.1.4",
27
- "webpack": "^5.50.0",
26
+ "terser-webpack-plugin": "^5.2.4",
27
+ "webpack": "^5.53.0",
28
28
  "webpack-assets-manifest": "^5.0.6",
29
29
  "webpack-cli": "^4.8.0",
30
30
  "webpack-merge": "^5.8.0",
31
- "webpack-sources": "^3.2.0"
31
+ "webpack-sources": "^3.2.1"
32
32
  },
33
33
  "devDependencies": {
34
34
  "eslint": "^7.32.0",
35
35
  "eslint-config-airbnb": "^18.2.1",
36
- "eslint-config-prettier": "^7.2.0",
37
- "eslint-plugin-import": "^2.24.0",
36
+ "eslint-config-prettier": "^8.3.0",
37
+ "eslint-plugin-import": "^2.24.2",
38
38
  "eslint-plugin-jsx-a11y": "^6.4.1",
39
- "eslint-plugin-react": "^7.24.0",
40
- "jest": "^26.6.3"
39
+ "eslint-plugin-react": "^7.26.0",
40
+ "jest": "^27.2.1"
41
41
  },
42
42
  "jest": {
43
43
  "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$",
data/test/command_test.rb CHANGED
@@ -31,3 +31,79 @@ class CommandTest < Minitest::Test
31
31
  end
32
32
  end
33
33
  end
34
+
35
+ class ClearCommandVersioningTest < Minitest::Test
36
+ def setup
37
+ @now = Time.parse("2021-01-01 12:34:56 UTC")
38
+ # Test assets to be kept and deleted, path and mtime
39
+ @prev_files = {
40
+ # recent versions to be kept with Webpacker.commands.clean(count = 2)
41
+ "js/application-deadbeef.js" => @now - 4000,
42
+ "js/common-deadbeee.js" => @now - 4002,
43
+ "css/common-deadbeed.css" => @now - 4004,
44
+ "media/images/logo-deadbeeb.css" => @now - 4006,
45
+ "js/application-1eadbeef.js" => @now - 8000,
46
+ "js/common-1eadbeee.js" => @now - 8002,
47
+ "css/common-1eadbeed.css" => @now - 8004,
48
+ "media/images/logo-1eadbeeb.css" => @now - 8006,
49
+ # new files to be kept with Webpacker.commands.clean(age = 3600)
50
+ "js/brandnew-0001.js" => @now,
51
+ "js/brandnew-0002.js" => @now - 10,
52
+ "js/brandnew-0003.js" => @now - 20,
53
+ "js/brandnew-0004.js" => @now - 40,
54
+ }.transform_keys { |path| "#{Webpacker.config.public_output_path}/#{path}" }
55
+ @expired_files = {
56
+ # old files that are outside count = 2 or age = 3600 and to be deleted
57
+ "js/application-0eadbeef.js" => @now - 9000,
58
+ "js/common-0eadbeee.js" => @now - 9002,
59
+ "css/common-0eadbeed.css" => @now - 9004,
60
+ "js/brandnew-0005.js" => @now - 3640,
61
+ }.transform_keys { |path| "#{Webpacker.config.public_output_path}/#{path}" }
62
+ @all_files = @prev_files.merge(@expired_files)
63
+ @dir_glob_stub = Proc.new { |arg|
64
+ case arg
65
+ when "#{Webpacker.config.public_output_path}/**/*"
66
+ @all_files.keys
67
+ else
68
+ []
69
+ end
70
+ }
71
+ @file_mtime_stub = Proc.new { |longpath|
72
+ @all_files[longpath]
73
+ }
74
+ @file_delete_mock = Minitest::Mock.new
75
+ @expired_files.keys.each do |longpath|
76
+ @file_delete_mock.expect(:delete, 1, [longpath])
77
+ end
78
+ @file_delete_stub = Proc.new { |longpath|
79
+ if @prev_files.has_key?(longpath)
80
+ flunk "#{longpath} should not be deleted"
81
+ else
82
+ @file_delete_mock.delete(longpath)
83
+ end
84
+ }
85
+ end
86
+
87
+ def time_and_files_stub(&proc)
88
+ Time.stub :now, @now do
89
+ Dir.stub :glob, @dir_glob_stub do
90
+ File.stub :directory?, false do
91
+ File.stub :file?, true do
92
+ File.stub :mtime, @file_mtime_stub do
93
+ File.stub :delete, @file_delete_stub do
94
+ yield proc
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ @file_delete_mock.verify
102
+ end
103
+
104
+ def test_clean_command_with_versioned_files
105
+ time_and_files_stub do
106
+ assert Webpacker.commands.clean
107
+ end
108
+ end
109
+ end
@@ -50,7 +50,7 @@ class DevServerRunnerTest < Webpacker::Test
50
50
  cmd = ["#{test_app_path}/node_modules/.bin/webpack", "serve", "--config", "#{test_app_path}/config/webpack/development.js"]
51
51
  env = Webpacker::Compiler.env.dup
52
52
  ENV["WEBPACKER_CONFIG"] = env["WEBPACKER_CONFIG"] = "#{test_app_path}/config/webpacker_other_location.yml"
53
- env["WEBPACK_DEV_SERVER"] = "true"
53
+ env["WEBPACK_SERVE"] = "true"
54
54
  verify_command(cmd, env: env)
55
55
  end
56
56
 
data/test/helper_test.rb CHANGED
@@ -96,12 +96,21 @@ class HelperTest < ActionView::TestCase
96
96
  end
97
97
 
98
98
  def test_javascript_pack_tag
99
+ assert_equal \
100
+ %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
101
+ %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
102
+ %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>\n) +
103
+ %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js" defer="defer"></script>),
104
+ javascript_pack_tag("application", "bootstrap")
105
+ end
106
+
107
+ def test_javascript_pack_with_no_defer_tag
99
108
  assert_equal \
100
109
  %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
101
110
  %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
102
111
  %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>\n) +
103
112
  %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
104
- javascript_pack_tag("application", "bootstrap")
113
+ javascript_pack_tag("application", "bootstrap", defer: false)
105
114
  end
106
115
 
107
116
  def test_javascript_pack_tag_splat
@@ -114,9 +123,9 @@ class HelperTest < ActionView::TestCase
114
123
 
115
124
  def test_javascript_pack_tag_symbol
116
125
  assert_equal \
117
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
118
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
119
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>),
126
+ %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js" defer="defer"></script>\n) +
127
+ %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js" defer="defer"></script>\n) +
128
+ %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
120
129
  javascript_pack_tag(:application)
121
130
  end
122
131
 
@@ -0,0 +1 @@
1
+ $test_app_autoload_paths_in_initializer = ActiveSupport::Dependencies.autoload_paths
@@ -27,4 +27,8 @@ class WebpackerTest < Webpacker::Test
27
27
  assert Webpacker.inlining_css?
28
28
  end
29
29
  end
30
+
31
+ def test_app_autoload_paths_cleanup
32
+ assert_empty $test_app_autoload_paths_in_initializer
33
+ end
30
34
  end
data/webpacker.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  "changelog_uri" => "https://github.com/rails/webpacker/blob/v#{Webpacker::VERSION}/CHANGELOG.md"
16
16
  }
17
17
 
18
- s.required_ruby_version = ">= 2.4.0"
18
+ s.required_ruby_version = ">= 2.7.0"
19
19
 
20
20
  s.add_dependency "activesupport", ">= 5.2"
21
21
  s.add_dependency "railties", ">= 5.2"
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency "semantic_range", ">= 2.3.0"
24
24
 
25
25
  s.add_development_dependency "bundler", ">= 1.3.0"
26
- s.add_development_dependency "rubocop", "0.93.1"
26
+ s.add_development_dependency "rubocop"
27
27
  s.add_development_dependency "rubocop-performance"
28
28
 
29
29
  s.files = `git ls-files`.split("\n")