webpacker 4.0.7 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.node-version +1 -1
  3. data/.rubocop.yml +2 -1
  4. data/.travis.yml +10 -20
  5. data/CHANGELOG.md +243 -137
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +84 -62
  8. data/README.md +52 -149
  9. data/docs/css.md +15 -4
  10. data/docs/deployment.md +40 -11
  11. data/docs/docker.md +33 -14
  12. data/docs/engines.md +53 -3
  13. data/docs/es6.md +19 -1
  14. data/docs/integrations.md +220 -0
  15. data/docs/troubleshooting.md +37 -9
  16. data/docs/typescript.md +10 -8
  17. data/docs/webpack-dev-server.md +1 -1
  18. data/docs/webpack.md +18 -3
  19. data/gemfiles/{Gemfile-rails.4.2.x → Gemfile-rails.6.0.x} +1 -1
  20. data/lib/install/bin/webpack +0 -1
  21. data/lib/install/bin/webpack-dev-server +0 -1
  22. data/lib/install/coffee.rb +1 -1
  23. data/lib/install/config/babel.config.js +10 -10
  24. data/lib/install/config/webpacker.yml +2 -1
  25. data/lib/install/elm.rb +1 -1
  26. data/lib/install/erb.rb +2 -2
  27. data/lib/install/examples/angular/hello_angular/polyfills.ts +2 -2
  28. data/lib/install/examples/react/babel.config.js +16 -14
  29. data/lib/install/examples/svelte/app.svelte +11 -0
  30. data/lib/install/examples/svelte/hello_svelte.js +20 -0
  31. data/lib/install/loaders/elm.js +9 -6
  32. data/lib/install/loaders/svelte.js +9 -0
  33. data/lib/install/loaders/typescript.js +1 -1
  34. data/lib/install/svelte.rb +29 -0
  35. data/lib/install/template.rb +2 -2
  36. data/lib/install/typescript.rb +1 -1
  37. data/lib/install/vue.rb +1 -1
  38. data/lib/tasks/installers.rake +1 -0
  39. data/lib/tasks/webpacker.rake +2 -0
  40. data/lib/tasks/webpacker/check_node.rake +14 -7
  41. data/lib/tasks/webpacker/check_yarn.rake +16 -9
  42. data/lib/tasks/webpacker/clean.rake +25 -0
  43. data/lib/tasks/webpacker/clobber.rake +8 -4
  44. data/lib/tasks/webpacker/compile.rake +2 -10
  45. data/lib/tasks/webpacker/yarn_install.rake +5 -1
  46. data/lib/webpacker.rb +9 -1
  47. data/lib/webpacker/commands.rb +53 -1
  48. data/lib/webpacker/compiler.rb +15 -8
  49. data/lib/webpacker/configuration.rb +9 -1
  50. data/lib/webpacker/dev_server.rb +1 -1
  51. data/lib/webpacker/dev_server_proxy.rb +2 -8
  52. data/lib/webpacker/dev_server_runner.rb +4 -4
  53. data/lib/webpacker/env.rb +1 -1
  54. data/lib/webpacker/helper.rb +39 -13
  55. data/lib/webpacker/manifest.rb +4 -4
  56. data/lib/webpacker/railtie.rb +6 -0
  57. data/lib/webpacker/version.rb +1 -1
  58. data/package.json +38 -38
  59. data/package/__tests__/config.js +0 -23
  60. data/package/config.js +2 -10
  61. data/package/config_types/config_list.js +3 -3
  62. data/package/config_types/config_object.js +1 -1
  63. data/package/environments/__tests__/base.js +10 -0
  64. data/package/environments/base.js +14 -3
  65. data/package/environments/development.js +1 -5
  66. data/package/environments/production.js +12 -0
  67. data/package/rules/babel.js +1 -1
  68. data/package/rules/node_modules.js +2 -2
  69. data/package/rules/sass.js +3 -2
  70. data/package/utils/__tests__/get_style_rule.js +9 -0
  71. data/package/utils/deep_merge.js +5 -5
  72. data/package/utils/get_style_rule.js +7 -12
  73. data/package/utils/helpers.js +9 -9
  74. data/test/command_test.rb +6 -0
  75. data/test/compiler_test.rb +5 -6
  76. data/test/configuration_test.rb +36 -27
  77. data/test/dev_server_test.rb +22 -0
  78. data/test/helper_test.rb +34 -0
  79. data/test/manifest_test.rb +37 -6
  80. data/test/rake_tasks_test.rb +17 -0
  81. data/test/test_app/app/javascript/packs/multi_entry.css +4 -0
  82. data/test/test_app/app/javascript/packs/multi_entry.js +4 -0
  83. data/test/test_app/bin/webpack +0 -1
  84. data/test/test_app/bin/webpack-dev-server +0 -1
  85. data/test/test_app/config/webpacker.yml +1 -0
  86. data/test/test_app/public/packs/manifest.json +3 -0
  87. data/webpacker.gemspec +5 -3
  88. data/yarn.lock +2684 -1846
  89. metadata +48 -12
  90. data/gemfiles/Gemfile-rails.5.0.x +0 -9
  91. data/gemfiles/Gemfile-rails.5.1.x +0 -9
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ test: /\.svelte(\.erb)?$/,
3
+ use: [{
4
+ loader: 'svelte-loader',
5
+ options: {
6
+ hotReload: false
7
+ }
8
+ }],
9
+ }
@@ -1,7 +1,7 @@
1
1
  const PnpWebpackPlugin = require('pnp-webpack-plugin')
2
2
 
3
3
  module.exports = {
4
- test: /\.(ts|tsx)?(\.erb)?$/,
4
+ test: /\.tsx?(\.erb)?$/,
5
5
  use: [
6
6
  {
7
7
  loader: 'ts-loader',
@@ -0,0 +1,29 @@
1
+ require "webpacker/configuration"
2
+
3
+ say "Copying svelte loader to config/webpack/loaders"
4
+ copy_file "#{__dir__}/loaders/svelte.js", Rails.root.join("config/webpack/loaders/svelte.js").to_s
5
+
6
+ say "Adding svelte loader to config/webpack/environment.js"
7
+ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
8
+ "const svelte = require('./loaders/svelte')\n",
9
+ after: /require\(('|")@rails\/webpacker\1\);?\n/
10
+
11
+ insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
12
+ "environment.loaders.prepend('svelte', svelte)\n",
13
+ before: "module.exports"
14
+
15
+ say "Copying Svelte example entry file to #{Webpacker.config.source_entry_path}"
16
+ copy_file "#{__dir__}/examples/svelte/hello_svelte.js",
17
+ "#{Webpacker.config.source_entry_path}/hello_svelte.js"
18
+
19
+ say "Copying Svelte app file to #{Webpacker.config.source_path}"
20
+ copy_file "#{__dir__}/examples/svelte/app.svelte",
21
+ "#{Webpacker.config.source_path}/app.svelte"
22
+
23
+ say "Installing all Svelte dependencies"
24
+ run "yarn add svelte svelte-loader"
25
+
26
+ say "Updating webpack paths to include .svelte file extension"
27
+ insert_into_file Webpacker.config.config_path, "- .svelte\n".indent(4), after: /\s+extensions:\n/
28
+
29
+ say "Webpacker now supports Svelte 🎉", :green
@@ -1,7 +1,7 @@
1
1
  # Install Webpacker
2
2
  copy_file "#{__dir__}/config/webpacker.yml", "config/webpacker.yml"
3
3
 
4
- puts "Copying webpack core config"
4
+ say "Copying webpack core config"
5
5
  directory "#{__dir__}/config/webpack", "config/webpack"
6
6
 
7
7
  say "Copying postcss.config.js to app root directory"
@@ -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"
@@ -21,7 +21,7 @@ copy_file "#{__dir__}/loaders/typescript.js", Rails.root.join("config/webpack/lo
21
21
  say "Adding typescript loader to config/webpack/environment.js"
22
22
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
23
23
  "const typescript = require('./loaders/typescript')\n",
24
- after: "require('@rails/webpacker')\n"
24
+ after: /require\(('|")@rails\/webpacker\1\);?\n/
25
25
 
26
26
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
27
27
  "environment.loaders.prepend('typescript', typescript)\n",
@@ -6,7 +6,7 @@ copy_file "#{__dir__}/loaders/vue.js", Rails.root.join("config/webpack/loaders/v
6
6
  say "Adding vue loader plugin to config/webpack/environment.js"
7
7
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
8
8
  "const { VueLoaderPlugin } = require('vue-loader')\n",
9
- after: "require('@rails/webpacker')\n"
9
+ after: /require\(('|")@rails\/webpacker\1\);?\n/
10
10
 
11
11
  insert_into_file Rails.root.join("config/webpack/environment.js").to_s,
12
12
  "environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())\n",
@@ -6,6 +6,7 @@ installers = {
6
6
  "Erb": :erb,
7
7
  "Coffee": :coffee,
8
8
  "Typescript": :typescript,
9
+ "Svelte": :svelte,
9
10
  "Stimulus": :stimulus
10
11
  }.freeze
11
12
 
@@ -2,6 +2,7 @@ tasks = {
2
2
  "webpacker:info" => "Provides information on Webpacker's environment",
3
3
  "webpacker:install" => "Installs and setup webpack with Yarn",
4
4
  "webpacker:compile" => "Compiles webpack bundles based on environment",
5
+ "webpacker:clean" => "Remove old compiled webpacks",
5
6
  "webpacker:clobber" => "Removes the webpack compiled output directory",
6
7
  "webpacker:check_node" => "Verifies if Node.js is installed",
7
8
  "webpacker:check_yarn" => "Verifies if Yarn is installed",
@@ -13,6 +14,7 @@ tasks = {
13
14
  "webpacker:install:vue" => "Installs and setup example Vue component",
14
15
  "webpacker:install:angular" => "Installs and setup example Angular component",
15
16
  "webpacker:install:elm" => "Installs and setup example Elm component",
17
+ "webpacker:install:svelte" => "Installs and setup example Svelte component",
16
18
  "webpacker:install:stimulus" => "Installs and setup example Stimulus component",
17
19
  "webpacker:install:erb" => "Installs Erb loader with an example",
18
20
  "webpacker:install:coffee" => "Installs CoffeeScript loader with an example",
@@ -1,3 +1,4 @@
1
+ require "semantic_range"
1
2
  namespace :webpacker do
2
3
  desc "Verifies if Node.js is installed"
3
4
  task :check_node do
@@ -6,19 +7,25 @@ namespace :webpacker do
6
7
  raise Errno::ENOENT if node_version.blank?
7
8
 
8
9
  pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9
- node_requirement = JSON.parse(pkg_path.read)["engines"]["node"]
10
+ node_range = JSON.parse(pkg_path.read)["engines"]["node"]
11
+ is_valid = SemanticRange.satisfies?(node_version, node_range) rescue false
12
+ semver_major = node_version[/\d+/] rescue nil
13
+ is_unstable = semver_major.to_i.odd? rescue false
10
14
 
11
- requirement = Gem::Requirement.new(node_requirement)
12
- version = Gem::Version.new(node_version.strip.tr("v", ""))
15
+ if is_unstable
16
+ $stderr.puts "Warning: you are using an unstable release of Node.js (#{node_version}). If you encounter issues with Node.js, consider switching to an Active LTS release. More info: https://docs.npmjs.com/try-the-latest-stable-version-of-node"
17
+ end
13
18
 
14
- unless requirement.satisfied_by?(version)
15
- $stderr.puts "Webpacker requires Node.js #{requirement} and you are using #{version}"
19
+ unless is_valid
20
+ $stderr.puts "Webpacker requires Node.js \"#{node_range}\" and you are using #{node_version}"
16
21
  $stderr.puts "Please upgrade Node.js https://nodejs.org/en/download/"
17
- $stderr.puts "Exiting!" && exit!
22
+ $stderr.puts "Exiting!"
23
+ exit!
18
24
  end
19
25
  rescue Errno::ENOENT
20
26
  $stderr.puts "Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/"
21
- $stderr.puts "Exiting!" && exit!
27
+ $stderr.puts "Exiting!"
28
+ exit!
22
29
  end
23
30
  end
24
31
  end
@@ -1,3 +1,4 @@
1
+ require "semantic_range"
1
2
  namespace :webpacker do
2
3
  desc "Verifies if Yarn is installed"
3
4
  task :check_yarn do
@@ -6,19 +7,25 @@ namespace :webpacker do
6
7
  raise Errno::ENOENT if yarn_version.blank?
7
8
 
8
9
  pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9
- yarn_requirement = JSON.parse(pkg_path.read)["engines"]["yarn"]
10
+ yarn_range = JSON.parse(pkg_path.read)["engines"]["yarn"]
11
+ is_valid = SemanticRange.satisfies?(yarn_version, yarn_range) rescue false
12
+ is_unsupported = SemanticRange.satisfies?(yarn_version, ">=2.0.0") rescue false
10
13
 
11
- requirement = Gem::Requirement.new(yarn_requirement)
12
- version = Gem::Version.new(yarn_version)
13
-
14
- unless requirement.satisfied_by?(version)
15
- $stderr.puts "Webpacker requires Yarn #{requirement} and you are using #{version}"
16
- $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
17
- $stderr.puts "Exiting!" && exit!
14
+ unless is_valid
15
+ $stderr.puts "Webpacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
16
+ if is_unsupported
17
+ $stderr.puts "This version of Webpacker does not support Yarn #{yarn_version}. Please downgrade to a supported version of Yarn https://yarnpkg.com/lang/en/docs/install/"
18
+ $stderr.puts "For information on using Webpacker with Yarn 2.0, see https://github.com/rails/webpacker/issues/2112"
19
+ else
20
+ $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
21
+ end
22
+ $stderr.puts "Exiting!"
23
+ exit!
18
24
  end
19
25
  rescue Errno::ENOENT
20
26
  $stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
21
- $stderr.puts "Exiting!" && exit!
27
+ $stderr.puts "Exiting!"
28
+ exit!
22
29
  end
23
30
  end
24
31
  end
@@ -0,0 +1,25 @@
1
+ $stdout.sync = true
2
+
3
+ require "webpacker/configuration"
4
+
5
+ namespace :webpacker do
6
+ desc "Remove old compiled webpacks"
7
+ task :clean, [:keep, :age] => ["webpacker:verify_install", :environment] do |_, args|
8
+ Webpacker.ensure_log_goes_to_stdout do
9
+ Webpacker.clean(Integer(args.keep || 2), Integer(args.age || 3600))
10
+ end
11
+ end
12
+ end
13
+
14
+ skip_webpacker_clean = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
15
+
16
+ unless skip_webpacker_clean
17
+ # Run clean if the assets:clean is run
18
+ if Rake::Task.task_defined?("assets:clean")
19
+ Rake::Task["assets:clean"].enhance do
20
+ Rake::Task["webpacker:clean"].invoke
21
+ end
22
+ else
23
+ Rake::Task.define_task("assets:clean" => "webpacker:clean")
24
+ end
25
+ end
@@ -8,9 +8,13 @@ namespace :webpacker do
8
8
  end
9
9
  end
10
10
 
11
- # Run clobber if the assets:clobber is run
12
- if Rake::Task.task_defined?("assets:clobber")
13
- Rake::Task["assets:clobber"].enhance do
14
- Rake::Task["webpacker:clobber"].invoke
11
+ skip_webpacker_clobber = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
12
+
13
+ unless skip_webpacker_clobber
14
+ # Run clobber if the assets:clobber is run
15
+ if Rake::Task.task_defined?("assets:clobber")
16
+ Rake::Task["assets:clobber"].enhance do
17
+ Rake::Task["webpacker:clobber"].invoke
18
+ end
15
19
  end
16
20
  end
@@ -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
@@ -26,8 +18,8 @@ end
26
18
  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
- Webpacker.with_node_env("production") do
30
- ensure_log_goes_to_stdout do
21
+ Webpacker.with_node_env(ENV.fetch("NODE_ENV", "production")) do
22
+ Webpacker.ensure_log_goes_to_stdout do
31
23
  if Webpacker.compile
32
24
  # Successful compilation!
33
25
  else
@@ -1,6 +1,10 @@
1
1
  namespace :webpacker do
2
2
  desc "Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
3
3
  task :yarn_install do
4
- system "yarn install --no-progress"
4
+ valid_node_envs = %w[test development production]
5
+ node_env = ENV.fetch("NODE_ENV") do
6
+ valid_node_envs.include?(Rails.env) ? Rails.env : "production"
7
+ end
8
+ system({ "NODE_ENV" => node_env }, "yarn install --no-progress --frozen-lockfile")
5
9
  end
6
10
  end
@@ -22,9 +22,17 @@ 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
- delegate :bootstrap, :clobber, :compile, to: :commands
35
+ delegate :bootstrap, :clean, :clobber, :compile, to: :commands
28
36
  end
29
37
 
30
38
  require "webpacker/instance"
@@ -1,10 +1,43 @@
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
+ # Cleanup old assets in the compile directory. By default it will
9
+ # keep the latest version, 2 backups created within the past hour.
10
+ #
11
+ # Examples
12
+ #
13
+ # To force only 1 backup to be kept, set count=1 and age=0.
14
+ #
15
+ # To only keep files created within the last 10 minutes, set count=0 and
16
+ # age=600.
17
+ #
18
+ def clean(count = 2, age = 3600)
19
+ if config.public_output_path.exist? && config.public_manifest_path.exist?
20
+ versions
21
+ .sort
22
+ .reverse
23
+ .each_with_index
24
+ .drop_while do |(mtime, _), index|
25
+ max_age = [0, Time.now - Time.at(mtime)].max
26
+ max_age < age && index < count
27
+ end
28
+ .each do |(_, files), index|
29
+ files.each do |file|
30
+ if File.file?(file)
31
+ File.delete(file)
32
+ logger.info "Removed #{file}"
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ true
39
+ end
40
+
8
41
  def clobber
9
42
  config.public_output_path.rmtree if config.public_output_path.exist?
10
43
  config.cache_path.rmtree if config.cache_path.exist?
@@ -19,4 +52,23 @@ class Webpacker::Commands
19
52
  manifest.refresh if success
20
53
  end
21
54
  end
55
+
56
+ private
57
+ def versions
58
+ all_files = Dir.glob("#{config.public_output_path}/**/*")
59
+ manifest_config = Dir.glob("#{config.public_manifest_path}*")
60
+
61
+ packs = all_files - manifest_config - current_version
62
+ packs.reject { |file| File.directory?(file) }.group_by { |file| File.mtime(file).utc.to_i }
63
+ end
64
+
65
+ def current_version
66
+ packs = manifest.refresh.values.map do |value|
67
+ next if value.is_a?(Hash)
68
+
69
+ File.join(config.root_path, "public", "#{value}*")
70
+ end.compact
71
+
72
+ Dir.glob(packs).uniq
73
+ end
22
74
  end
@@ -19,9 +19,15 @@ class Webpacker::Compiler
19
19
  def compile
20
20
  if stale?
21
21
  run_webpack.tap do |success|
22
- record_compilation_digest if success
22
+ # We used to only record the digest on success
23
+ # However, the output file is still written on error, (at least with ts-loader), meaning that the
24
+ # digest should still be updated. If it's not, you can end up in a situation where a recompile doesn't
25
+ # take place when it should.
26
+ # See https://github.com/rails/webpacker/issues/2113
27
+ record_compilation_digest
23
28
  end
24
29
  else
30
+ logger.info "Everything's up-to-date. Nothing to do"
25
31
  true
26
32
  end
27
33
  end
@@ -56,7 +62,7 @@ class Webpacker::Compiler
56
62
  end
57
63
 
58
64
  def run_webpack
59
- logger.info "Compiling"
65
+ logger.info "Compiling..."
60
66
 
61
67
  stdout, stderr, status = Open3.capture3(
62
68
  webpack_env,
@@ -67,12 +73,13 @@ class Webpacker::Compiler
67
73
  if status.success?
68
74
  logger.info "Compiled all packs in #{config.public_output_path}"
69
75
  logger.error "#{stderr}" unless stderr.empty?
70
- else
71
- logger.error "Compilation failed:\n#{stderr}"
72
- end
73
76
 
74
- if config.webpack_compile_output?
75
- logger.info stdout
77
+ if config.webpack_compile_output?
78
+ logger.info stdout
79
+ end
80
+ else
81
+ non_empty_streams = [stdout, stderr].delete_if(&:empty?)
82
+ logger.error "Compilation failed:\n#{non_empty_streams.join("\n\n")}"
76
83
  end
77
84
 
78
85
  status.success?
@@ -81,7 +88,7 @@ class Webpacker::Compiler
81
88
  def default_watched_paths
82
89
  [
83
90
  *config.resolved_paths_globbed,
84
- "#{config.source_path.relative_path_from(config.root_path)}/**/*",
91
+ config.source_path_globbed,
85
92
  "yarn.lock", "package.json",
86
93
  "config/webpack/**/*"
87
94
  ].freeze
@@ -23,12 +23,16 @@ class Webpacker::Configuration
23
23
  root_path.join(fetch(:source_path))
24
24
  end
25
25
 
26
+ def source_path_globbed
27
+ globbed_path_with_extensions(source_path.relative_path_from(root_path))
28
+ end
29
+
26
30
  def resolved_paths
27
31
  fetch(:resolved_paths)
28
32
  end
29
33
 
30
34
  def resolved_paths_globbed
31
- resolved_paths.map { |p| "#{p}/**/*" }
35
+ resolved_paths.map { |p| globbed_path_with_extensions(p) }
32
36
  end
33
37
 
34
38
  def source_entry_path
@@ -102,4 +106,8 @@ class Webpacker::Configuration
102
106
  @defaults ||= \
103
107
  HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/webpacker.yml", __FILE__))[env])
104
108
  end
109
+
110
+ def globbed_path_with_extensions(path)
111
+ "#{path}/**/*{#{extensions.join(',')}}"
112
+ end
105
113
  end
@@ -32,7 +32,7 @@ class Webpacker::DevServer
32
32
 
33
33
  def https?
34
34
  case fetch(:https)
35
- when true, "true"
35
+ when true, "true", Hash
36
36
  true
37
37
  else
38
38
  false