shakapacker 6.6.0 → 7.0.0.rc.0

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.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-backward-compatibility.yml +43 -0
  3. data/CHANGELOG.md +50 -4
  4. data/CONTRIBUTING.md +4 -4
  5. data/Gemfile.development_dependencies +1 -1
  6. data/README.md +113 -88
  7. data/Rakefile +5 -0
  8. data/config/shakapacker.yml +1 -0
  9. data/docs/deployment.md +12 -10
  10. data/docs/developing_webpacker.md +5 -5
  11. data/docs/react.md +10 -6
  12. data/docs/style_loader_vs_mini_css.md +2 -2
  13. data/docs/troubleshooting.md +22 -18
  14. data/docs/using_esbuild_loader.md +5 -3
  15. data/docs/using_swc_loader.md +2 -2
  16. data/docs/v6_upgrade.md +2 -2
  17. data/docs/v7_upgrade.md +56 -0
  18. data/lib/install/bin/shakapacker +13 -0
  19. data/lib/install/bin/shakapacker-dev-server +13 -0
  20. data/lib/install/config/{webpacker.yml → shakapacker.yml} +13 -8
  21. data/lib/install/template.rb +7 -7
  22. data/lib/{webpacker → shakapacker}/base_strategy.rb +2 -2
  23. data/lib/{webpacker → shakapacker}/commands.rb +4 -4
  24. data/lib/{webpacker → shakapacker}/compiler.rb +43 -15
  25. data/lib/{webpacker → shakapacker}/compiler_strategy.rb +6 -6
  26. data/lib/{webpacker → shakapacker}/configuration.rb +52 -21
  27. data/lib/shakapacker/deprecation_helper.rb +88 -0
  28. data/lib/{webpacker → shakapacker}/dev_server.rb +27 -4
  29. data/lib/{webpacker → shakapacker}/dev_server_proxy.rb +4 -4
  30. data/lib/shakapacker/dev_server_runner.rb +104 -0
  31. data/lib/{webpacker → shakapacker}/digest_strategy.rb +6 -6
  32. data/lib/{webpacker → shakapacker}/env.rb +8 -8
  33. data/lib/{webpacker → shakapacker}/helper.rb +20 -20
  34. data/lib/{webpacker → shakapacker}/instance.rb +13 -10
  35. data/lib/{webpacker → shakapacker}/manifest.rb +14 -14
  36. data/lib/{webpacker → shakapacker}/mtime_strategy.rb +5 -5
  37. data/lib/shakapacker/railtie.rb +70 -0
  38. data/lib/shakapacker/runner.rb +28 -0
  39. data/lib/shakapacker/utils/version_syntax_converter.rb +2 -2
  40. data/lib/{webpacker → shakapacker}/version.rb +2 -2
  41. data/lib/{webpacker → shakapacker}/version_checker.rb +8 -8
  42. data/lib/shakapacker/webpack_runner.rb +67 -0
  43. data/lib/shakapacker.rb +51 -1
  44. data/lib/tasks/shakapacker/binstubs.rake +15 -0
  45. data/lib/tasks/shakapacker/check_binstubs.rake +25 -0
  46. data/lib/tasks/shakapacker/check_node.rake +31 -0
  47. data/lib/tasks/shakapacker/check_yarn.rake +33 -0
  48. data/lib/tasks/shakapacker/clean.rake +23 -0
  49. data/lib/tasks/shakapacker/clobber.rake +18 -0
  50. data/lib/tasks/shakapacker/compile.rake +31 -0
  51. data/lib/tasks/shakapacker/info.rake +21 -0
  52. data/lib/tasks/shakapacker/install.rake +17 -0
  53. data/lib/tasks/shakapacker/verify_config.rake +12 -0
  54. data/lib/tasks/shakapacker/verify_install.rake +4 -0
  55. data/lib/tasks/shakapacker/yarn_install.rake +24 -0
  56. data/lib/tasks/shakapacker.rake +18 -0
  57. data/lib/tasks/webpacker/binstubs.rake +5 -11
  58. data/lib/tasks/webpacker/check_binstubs.rake +6 -9
  59. data/lib/tasks/webpacker/check_node.rake +5 -27
  60. data/lib/tasks/webpacker/check_yarn.rake +5 -29
  61. data/lib/tasks/webpacker/clean.rake +5 -19
  62. data/lib/tasks/webpacker/clobber.rake +6 -13
  63. data/lib/tasks/webpacker/compile.rake +5 -33
  64. data/lib/tasks/webpacker/info.rake +5 -17
  65. data/lib/tasks/webpacker/install.rake +5 -13
  66. data/lib/tasks/webpacker/verify_config.rake +6 -11
  67. data/lib/tasks/webpacker/verify_install.rake +7 -2
  68. data/lib/tasks/webpacker/yarn_install.rake +5 -20
  69. data/lib/tasks/webpacker.rake +15 -13
  70. data/lib/webpacker/dev_server_runner.rb +9 -96
  71. data/lib/webpacker/webpack_runner.rb +9 -58
  72. data/lib/webpacker.rb +3 -47
  73. data/package/__tests__/config-bc.js +27 -0
  74. data/package/__tests__/config.js +6 -5
  75. data/package/__tests__/dev_server-bc.js +46 -0
  76. data/package/__tests__/dev_server.js +9 -8
  77. data/package/__tests__/development-bc.js +66 -0
  78. data/package/__tests__/development.js +36 -5
  79. data/package/__tests__/env-bc.js +59 -0
  80. data/package/__tests__/env.js +3 -2
  81. data/package/__tests__/index.js +13 -0
  82. data/package/__tests__/production-bc.js +51 -0
  83. data/package/__tests__/production.js +25 -3
  84. data/package/__tests__/staging-bc.js +53 -0
  85. data/package/__tests__/staging.js +27 -4
  86. data/package/__tests__/test-bc.js +43 -0
  87. data/package/__tests__/test.js +22 -4
  88. data/package/babel/preset.js +1 -4
  89. data/package/config.js +25 -7
  90. data/package/dev_server.js +7 -4
  91. data/package/env.js +22 -3
  92. data/package/environments/__tests__/base-bc.js +107 -0
  93. data/package/environments/__tests__/base.js +13 -13
  94. data/package/environments/base.js +1 -1
  95. data/package/environments/development.js +4 -46
  96. data/package/environments/production.js +1 -1
  97. data/package/index.js +11 -4
  98. data/package/rules/__tests__/__utils__/webpack.js +1 -1
  99. data/package/rules/__tests__/file.js +27 -0
  100. data/package/rules/__tests__/swc.js +1 -2
  101. data/package/rules/file.js +2 -2
  102. data/package/utils/configPath.js +19 -0
  103. data/package/utils/defaultConfigPath.js +2 -0
  104. data/package/utils/get_style_rule.js +5 -2
  105. data/package/utils/helpers.js +24 -1
  106. data/package/utils/inliningCss.js +7 -0
  107. data/package/utils/snakeToCamelCase +7 -0
  108. data/package/webpackDevServerConfig.js +68 -0
  109. data/package.json +2 -2
  110. data/{webpacker.gemspec → shakapacker.gemspec} +3 -3
  111. data/spec/backward_compatibility_specs/command_spec_bc.rb +116 -0
  112. data/spec/backward_compatibility_specs/compiler_spec_bc.rb +59 -0
  113. data/spec/backward_compatibility_specs/compiler_strategy_spec_bc.rb +22 -0
  114. data/spec/backward_compatibility_specs/configuration_spec_bc.rb +286 -0
  115. data/spec/backward_compatibility_specs/dev_server_runner_spec_bc.rb +79 -0
  116. data/spec/backward_compatibility_specs/dev_server_spec_bc.rb +47 -0
  117. data/spec/backward_compatibility_specs/digest_strategy_spec_bc.rb +35 -0
  118. data/spec/backward_compatibility_specs/engine_rake_tasks_spec_bc.rb +44 -0
  119. data/spec/backward_compatibility_specs/env_spec_bc.rb +23 -0
  120. data/spec/backward_compatibility_specs/helper_spec_bc.rb +243 -0
  121. data/spec/backward_compatibility_specs/instance_spec_bc.rb +31 -0
  122. data/spec/backward_compatibility_specs/manifest_spec_bc.rb +100 -0
  123. data/spec/backward_compatibility_specs/mtime_strategy_spec_bc.rb +55 -0
  124. data/spec/backward_compatibility_specs/rake_tasks_spec_bc.rb +37 -0
  125. data/spec/backward_compatibility_specs/spec_helper_initializer.rb +24 -0
  126. data/spec/backward_compatibility_specs/webpack_runner_spec_bc.rb +56 -0
  127. data/spec/backward_compatibility_specs/webpacker_spec_bc.rb +41 -0
  128. data/spec/backward_compatibility_specs/webpacker_test_app/.gitignore +2 -0
  129. data/spec/backward_compatibility_specs/webpacker_test_app/Rakefile +3 -0
  130. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/application.js +1 -1
  131. data/{lib/install → spec/backward_compatibility_specs/webpacker_test_app}/bin/webpacker +0 -0
  132. data/spec/backward_compatibility_specs/webpacker_test_app/config/application.rb +11 -0
  133. data/spec/backward_compatibility_specs/webpacker_test_app/config/environment.rb +4 -0
  134. data/spec/backward_compatibility_specs/webpacker_test_app/config/initializers/inspect_autoload_paths.rb +1 -0
  135. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpack/webpack.config.js +0 -0
  136. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker.yml +1 -1
  137. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_css_extract_ignore_order_warnings.yml +1 -1
  138. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_defaults_fallback.yml +1 -1
  139. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_no_precompile.yml +7 -0
  140. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_other_location.yml +1 -1
  141. data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_public_root.yml +1 -1
  142. data/spec/backward_compatibility_specs/webpacker_test_app/config.ru +5 -0
  143. data/spec/backward_compatibility_specs/webpacker_test_app/package.json +13 -0
  144. data/spec/backward_compatibility_specs/webpacker_test_app/public/packs/manifest.json +58 -0
  145. data/spec/backward_compatibility_specs/webpacker_test_app/some.config.js +0 -0
  146. data/spec/backward_compatibility_specs/webpacker_test_app/tmp/shakapacker/last-compilation-digest-production +1 -0
  147. data/spec/backward_compatibility_specs/webpacker_test_app/yarn.lock +11 -0
  148. data/spec/command_spec.rb +18 -16
  149. data/spec/compiler_spec.rb +19 -17
  150. data/spec/compiler_strategy_spec.rb +9 -7
  151. data/spec/configuration_spec.rb +108 -66
  152. data/spec/dev_server_runner_spec.rb +9 -8
  153. data/spec/dev_server_spec.rb +97 -9
  154. data/spec/digest_strategy_spec.rb +4 -2
  155. data/spec/engine_rake_tasks_spec.rb +12 -16
  156. data/spec/env_spec.rb +7 -5
  157. data/spec/helper_spec.rb +4 -2
  158. data/spec/instance_spec.rb +31 -0
  159. data/spec/manifest_spec.rb +21 -19
  160. data/spec/mounted_app/test/dummy/config/application.rb +1 -1
  161. data/spec/mounted_app/test/dummy/config/webpacker.yml +3 -3
  162. data/spec/mtime_strategy_spec.rb +4 -2
  163. data/spec/rake_tasks_spec.rb +20 -18
  164. data/spec/spec_helper.rb +0 -25
  165. data/spec/spec_helper_initializer.rb +24 -0
  166. data/spec/test_app/.gitignore +2 -0
  167. data/spec/test_app/app/javascript/entrypoints/application.js +10 -0
  168. data/spec/test_app/app/javascript/entrypoints/generated/something.js +2 -0
  169. data/spec/test_app/app/javascript/entrypoints/multi_entry.css +4 -0
  170. data/spec/test_app/app/javascript/entrypoints/multi_entry.js +4 -0
  171. data/spec/test_app/bin/{webpacker-dev-server → shakapacker} +3 -3
  172. data/spec/test_app/bin/{webpacker → shakapacker-dev-server} +3 -3
  173. data/spec/test_app/config/application.rb +1 -1
  174. data/spec/test_app/config/shakapacker.yml +82 -0
  175. data/spec/test_app/config/shakapacker_css_extract_ignore_order_warnings.yml +84 -0
  176. data/spec/test_app/config/shakapacker_defaults_fallback.yml +11 -0
  177. data/spec/test_app/config/shakapacker_manifest_path.yml +80 -0
  178. data/spec/test_app/config/shakapacker_nested_entries.yml +83 -0
  179. data/spec/test_app/config/shakapacker_no_precompile.yml +7 -0
  180. data/spec/test_app/config/shakapacker_other_location.yml +85 -0
  181. data/spec/test_app/config/shakapacker_public_root.yml +18 -0
  182. data/spec/version_checker_spec.rb +16 -15
  183. data/spec/webpack_runner_spec.rb +4 -3
  184. data/spec/webpacker_spec.rb +9 -29
  185. metadata +119 -44
  186. data/config/webpacker.yml +0 -1
  187. data/lib/webpacker/railtie.rb +0 -70
  188. data/lib/webpacker/runner.rb +0 -23
  189. data/package/configPath.js +0 -3
  190. data/package/inliningCss.js +0 -7
  191. data/spec/test_app/config/webpacker_no_precompile.yml +0 -7
  192. /data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/generated/something.js +0 -0
  193. /data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/multi_entry.css +0 -0
  194. /data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/multi_entry.js +0 -0
  195. /data/{lib/install → spec/backward_compatibility_specs/webpacker_test_app}/bin/webpacker-dev-server +0 -0
  196. /data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_manifest_path.yml +0 -0
  197. /data/spec/{test_app → backward_compatibility_specs/webpacker_test_app}/config/webpacker_nested_entries.yml +0 -0
@@ -0,0 +1,18 @@
1
+ tasks = {
2
+ "shakapacker:info" => "Provides information on Shakapacker's environment",
3
+ "shakapacker:install" => "Installs and setup webpack with Yarn",
4
+ "shakapacker:compile" => "Compiles webpack bundles based on environment",
5
+ "shakapacker:clean" => "Remove old compiled bundles",
6
+ "shakapacker:clobber" => "Removes the webpack compiled output directory",
7
+ "shakapacker:check_node" => "Verifies if Node.js is installed",
8
+ "shakapacker:check_yarn" => "Verifies if Yarn is installed",
9
+ "shakapacker:check_binstubs" => "Verifies that bin/shakapacker is present",
10
+ "shakapacker:binstubs" => "Installs Shakapacker binstubs in this application",
11
+ "shakapacker:verify_install" => "Verifies if Shakapacker is installed",
12
+ }.freeze
13
+
14
+ desc "Lists all available tasks in Shakapacker"
15
+ task :shakapacker do
16
+ puts "Available Shakapacker tasks are:"
17
+ tasks.each { |task, message| puts task.ljust(30) + message }
18
+ end
@@ -1,15 +1,9 @@
1
- binstubs_template_path = File.expand_path("../../install/binstubs.rb", __dir__).freeze
2
- bin_path = ENV["BUNDLE_BIN"] || Rails.root.join("bin")
3
-
4
1
  namespace :webpacker do
5
- desc "Installs Webpacker binstubs in this application"
6
- task binstubs: [:check_node, :check_yarn] do |task|
7
- prefix = task.name.split(/#|webpacker:binstubs/).first
2
+ desc "DEPRECATED - Installs Shakapacker binstubs in this application"
3
+ task :binstubs do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
8
5
 
9
- if Rails::VERSION::MAJOR >= 5
10
- exec "#{RbConfig.ruby} #{bin_path}/rails #{prefix}app:template LOCATION='#{binstubs_template_path}'"
11
- else
12
- exec "#{RbConfig.ruby} #{bin_path}/rake #{prefix}rails:template LOCATION='#{binstubs_template_path}'"
13
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:binstubs"].invoke
14
8
  end
15
9
  end
@@ -1,12 +1,9 @@
1
1
  namespace :webpacker do
2
- desc "Verifies that bin/webpacker is present"
3
- task :check_binstubs do
4
- unless File.exist?(Rails.root.join("bin/webpacker"))
5
- $stderr.puts "webpacker binstub not found.\n"\
6
- "Have you run rails webpacker:install ?\n"\
7
- "Make sure the bin directory and bin/webpacker are not included in .gitignore\n"\
8
- "Exiting!"
9
- exit!
10
- end
2
+ desc "DEPRECATED - Verifies that bin/shakapacker is present"
3
+ task :check_binstubs do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
5
+
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:check_binstubs"].invoke
11
8
  end
12
9
  end
@@ -1,31 +1,9 @@
1
- require "semantic_range"
2
1
  namespace :webpacker do
3
- desc "Verifies if Node.js is installed"
4
- task :check_node do
5
- begin
6
- node_version = `node -v || nodejs -v`.strip
7
- raise Errno::ENOENT if node_version.blank?
2
+ desc "DEPRECATED - Verifies if Node.js is installed"
3
+ task :check_node do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
8
5
 
9
- pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
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
14
-
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
18
-
19
- unless is_valid
20
- $stderr.puts "Webpacker requires Node.js \"#{node_range}\" and you are using #{node_version}"
21
- $stderr.puts "Please upgrade Node.js https://nodejs.org/en/download/"
22
- $stderr.puts "Exiting!"
23
- exit!
24
- end
25
- rescue Errno::ENOENT
26
- $stderr.puts "Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/"
27
- $stderr.puts "Exiting!"
28
- exit!
29
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:check_node"].invoke
30
8
  end
31
9
  end
@@ -1,33 +1,9 @@
1
- require "semantic_range"
2
1
  namespace :webpacker do
3
- desc "Verifies if Yarn is installed"
4
- task :check_yarn do
5
- begin
6
- which_command = Gem.win_platform? ? "where" : "which"
7
- raise Errno::ENOENT if `#{which_command} yarn`.strip.empty?
2
+ desc "DEPRECATED - Verifies if Yarn is installed"
3
+ task :check_yarn do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
8
5
 
9
- yarn_version = `yarn --version`.strip
10
- raise Errno::ENOENT if yarn_version.blank?
11
-
12
- pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
13
- yarn_range = JSON.parse(pkg_path.read)["engines"]["yarn"]
14
- is_valid = SemanticRange.satisfies?(yarn_version, yarn_range) rescue false
15
- is_unsupported = SemanticRange.satisfies?(yarn_version, ">=4.0.0") rescue false
16
-
17
- unless is_valid
18
- $stderr.puts "Webpacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
19
- if is_unsupported
20
- $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/"
21
- else
22
- $stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
23
- end
24
- $stderr.puts "Exiting!"
25
- exit!
26
- end
27
- rescue Errno::ENOENT
28
- $stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
29
- $stderr.puts "Exiting!"
30
- exit!
31
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:check_yarn"].invoke
32
8
  end
33
9
  end
@@ -1,23 +1,9 @@
1
- $stdout.sync = true
2
-
3
- require "webpacker/configuration"
4
-
5
1
  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
2
+ desc "DEPRECATED - Remove old compiled bundles"
3
+ task :clean, [:keep, :age] do |task, args|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
13
5
 
14
- if Webpacker.config.webpacker_precompile?
15
- # Run clean if the assets:clean is run
16
- if Rake::Task.task_defined?("assets:clean")
17
- Rake::Task["assets:clean"].enhance do
18
- Rake::Task["webpacker:clean"].invoke
19
- end
20
- else
21
- Rake::Task.define_task("assets:clean" => "webpacker:clean")
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:clean"].invoke(args.keep, args.age)
22
8
  end
23
9
  end
@@ -1,18 +1,11 @@
1
- require "webpacker/configuration"
1
+ require "shakapacker/configuration"
2
2
 
3
3
  namespace :webpacker do
4
- desc "Remove the webpack compiled output directory"
5
- task clobber: ["webpacker:verify_config", :environment] do
6
- Webpacker.clobber
7
- $stdout.puts "Removed webpack output path directory #{Webpacker.config.public_output_path}"
8
- end
9
- end
4
+ desc "DEPRECATED - Remove the webpack compiled output directory"
5
+ task :clobber do |task|
6
+ Shakapacker.puts_rake_deprecation_message(task.name)
10
7
 
11
- if Webpacker.config.webpacker_precompile?
12
- # Run clobber if the assets:clobber is run
13
- if Rake::Task.task_defined?("assets:clobber")
14
- Rake::Task["assets:clobber"].enhance do
15
- Rake::Task["webpacker:clobber"].invoke
16
- end
8
+ prefix = task.name.split(/#|webpacker:/).first
9
+ Rake::Task["#{prefix}shakapacker:clobber"].invoke
17
10
  end
18
11
  end
@@ -1,37 +1,9 @@
1
- $stdout.sync = true
2
-
3
- def enhance_assets_precompile
4
- Rake::Task["assets:precompile"].enhance do |task|
5
- prefix = task.name.split(/#|assets:precompile/).first
6
-
7
- Rake::Task["#{prefix}webpacker:compile"].invoke
8
- end
9
- end
10
-
11
1
  namespace :webpacker do
12
- desc "Compile JavaScript packs using webpack for production with digests"
13
- task compile: ["webpacker:verify_install", :environment] do
14
- Webpacker.with_node_env(ENV.fetch("NODE_ENV", "production")) do
15
- Webpacker.ensure_log_goes_to_stdout do
16
- if Webpacker.compile
17
- # Successful compilation!
18
- else
19
- # Failed compilation
20
- exit!
21
- end
22
- end
23
- end
24
- end
25
- end
2
+ desc "DEPRECATED - Compile JavaScript packs using webpack for production with digests"
3
+ task :compile do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
26
5
 
27
- if Webpacker.config.webpacker_precompile?
28
- if Rake::Task.task_defined?("assets:precompile")
29
- # Rails already adds `yarn install` after 5.2
30
- # https://github.com/shakacode/shakapacker/issues/237
31
- enhance_assets_precompile
32
- else
33
- # Only add `yarn install` if Rails was not doing it (precompile was not defined).
34
- # TODO: Remove this in Shakapacker 7.0
35
- Rake::Task.define_task("assets:precompile" => ["webpacker:yarn_install", "webpacker:compile"])
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:compile"].invoke
36
8
  end
37
9
  end
@@ -1,21 +1,9 @@
1
- require "webpacker/version"
2
-
3
1
  namespace :webpacker do
4
- desc "Provide information on Webpacker's environment"
5
- task :info do
6
- Dir.chdir(Rails.root) do
7
- $stdout.puts "Ruby: #{`ruby --version`}"
8
- $stdout.puts "Rails: #{Rails.version}"
9
- $stdout.puts "Webpacker: #{Webpacker::VERSION}"
10
- $stdout.puts "Node: #{`node --version`}"
11
- $stdout.puts "Yarn: #{`yarn --version`}"
12
-
13
- $stdout.puts "\n"
14
- $stdout.puts "shakapacker: \n#{`npm list shakapacker version`}"
2
+ desc "DEPRECATED - Provide information on Shakapacker's environment"
3
+ task :info do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
15
5
 
16
- $stdout.puts "Is bin/webpacker present?: #{File.exist? 'bin/webpacker'}"
17
- $stdout.puts "Is bin/webpacker-dev-server present?: #{File.exist? 'bin/webpacker-dev-server'}"
18
- $stdout.puts "Is bin/yarn present?: #{File.exist? 'bin/yarn'}"
19
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:info"].invoke
20
8
  end
21
9
  end
@@ -1,17 +1,9 @@
1
- install_template_path = File.expand_path("../../install/template.rb", __dir__).freeze
2
- bin_path = ENV["BUNDLE_BIN"] || Rails.root.join("bin")
3
-
4
1
  namespace :webpacker do
5
- desc "Install Webpacker in this application"
6
- task install: [:check_node, :check_yarn] do |task|
7
- Webpacker::Configuration.installing = true
8
-
9
- prefix = task.name.split(/#|webpacker:install/).first
2
+ desc "DEPRECATED - Install Shakapacker in this application"
3
+ task :install do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
10
5
 
11
- if Rails::VERSION::MAJOR >= 5
12
- exec "#{RbConfig.ruby} #{bin_path}/rails #{prefix}app:template LOCATION='#{install_template_path}'"
13
- else
14
- exec "#{RbConfig.ruby} #{bin_path}/rake #{prefix}rails:template LOCATION='#{install_template_path}'"
15
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:install"].invoke
16
8
  end
17
9
  end
@@ -1,14 +1,9 @@
1
- require "webpacker/configuration"
2
-
3
1
  namespace :webpacker do
4
- desc "Verifies if the Webpacker config is present"
5
- task :verify_config do
6
- unless Webpacker.config.config_path.exist?
7
- path = Webpacker.config.config_path.relative_path_from(Pathname.new(pwd)).to_s
8
- $stderr.puts "Configuration #{path} file not found. \n"\
9
- "Make sure webpacker:install is run successfully before " \
10
- "running dependent tasks"
11
- exit!
12
- end
2
+ desc "DEPRECATED - Verifies if the Shakapacker config is present"
3
+ task :verify_config do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
5
+
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:verify_config"].invoke
13
8
  end
14
9
  end
@@ -1,4 +1,9 @@
1
1
  namespace :webpacker do
2
- desc "Verifies if Webpacker is installed"
3
- task verify_install: [:verify_config, :check_node, :check_yarn, :check_binstubs]
2
+ desc "DEPRECATED - Verifies if Shakapacker is installed"
3
+ task :verify_install do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
5
+
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:verify_install"].invoke
8
+ end
4
9
  end
@@ -1,24 +1,9 @@
1
1
  namespace :webpacker do
2
- desc "Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
3
- task :yarn_install do
4
- warn <<~MSG.strip
5
- Shakapacker - Automatic installation of yarn packages is deprecated
6
- Automatic installation of yarn packages when assets are precompiled is deprecated and will be removed in Shakapacker v7.
7
- Please ensure you are installing yarn packages explicitly before the asset compilation.
8
- MSG
2
+ desc "DEPRECATED - Support for older Rails versions. Install all JavaScript dependencies as specified via Yarn"
3
+ task :yarn_install do |task|
4
+ Shakapacker.puts_rake_deprecation_message(task.name)
9
5
 
10
- valid_node_envs = %w[test development production]
11
- node_env = ENV.fetch("NODE_ENV") do
12
- valid_node_envs.include?(Rails.env) ? Rails.env : "production"
13
- end
14
- Dir.chdir(Rails.root) do
15
- yarn_flags =
16
- if `yarn --version`.start_with?("1")
17
- "--no-progress --frozen-lockfile"
18
- else
19
- "--immutable"
20
- end
21
- system({ "NODE_ENV" => node_env }, "yarn install #{yarn_flags}")
22
- end
6
+ prefix = task.name.split(/#|webpacker:/).first
7
+ Rake::Task["#{prefix}shakapacker:yarn_install"].invoke
23
8
  end
24
9
  end
@@ -1,18 +1,20 @@
1
1
  tasks = {
2
- "webpacker:info" => "Provides information on Webpacker's environment",
3
- "webpacker:install" => "Installs and setup webpack with Yarn",
4
- "webpacker:compile" => "Compiles webpack bundles based on environment",
5
- "webpacker:clean" => "Remove old compiled webpacks",
6
- "webpacker:clobber" => "Removes the webpack compiled output directory",
7
- "webpacker:check_node" => "Verifies if Node.js is installed",
8
- "webpacker:check_yarn" => "Verifies if Yarn is installed",
9
- "webpacker:check_binstubs" => "Verifies that bin/webpacker is present",
10
- "webpacker:binstubs" => "Installs Webpacker binstubs in this application",
11
- "webpacker:verify_install" => "Verifies if Webpacker is installed",
2
+ "webpacker:info" => "DEPRECATED - Provides information on Shakapacker's environment",
3
+ "webpacker:install" => "DEPRECATED - Installs and setup webpack with Yarn",
4
+ "webpacker:compile" => "DEPRECATED - Compiles webpack bundles based on environment",
5
+ "webpacker:clean" => "DEPRECATED - Remove old compiled bundles",
6
+ "webpacker:clobber" => "DEPRECATED - Removes the webpack compiled output directory",
7
+ "webpacker:check_node" => "DEPRECATED - Verifies if Node.js is installed",
8
+ "webpacker:check_yarn" => "DEPRECATED - Verifies if Yarn is installed",
9
+ "webpacker:check_binstubs" => "DEPRECATED - Verifies that bin/shakapacker is present",
10
+ "webpacker:binstubs" => "DEPRECATED - Installs Shakapacker binstubs in this application",
11
+ "webpacker:verify_install" => "DEPRECATED - Verifies if Shakapacker is installed",
12
12
  }.freeze
13
13
 
14
- desc "Lists all available tasks in Webpacker"
15
- task :webpacker do
16
- puts "Available Webpacker tasks are:"
14
+ desc "DEPRECATED - Lists all available tasks in Webpacker"
15
+ task :webpacker do |task|
16
+ puts "DEPRECATED - Available Webpacker tasks are:"
17
17
  tasks.each { |task, message| puts task.ljust(30) + message }
18
+
19
+ Shakapacker.puts_rake_deprecation_message(task.name)
18
20
  end
@@ -1,96 +1,9 @@
1
- require "shellwords"
2
- require "socket"
3
- require "webpacker/configuration"
4
- require "webpacker/dev_server"
5
- require "webpacker/runner"
6
-
7
- module Webpacker
8
- class DevServerRunner < Webpacker::Runner
9
- def run
10
- load_config
11
- detect_unsupported_switches!
12
- detect_port!
13
- execute_cmd
14
- end
15
-
16
- private
17
-
18
- def load_config
19
- app_root = Pathname.new(@app_path)
20
-
21
- @config = Configuration.new(
22
- root_path: app_root,
23
- config_path: Pathname.new(@webpacker_config),
24
- env: ENV["RAILS_ENV"]
25
- )
26
-
27
- dev_server = DevServer.new(@config)
28
-
29
- @hostname = dev_server.host
30
- @port = dev_server.port
31
- @pretty = dev_server.pretty?
32
- @https = dev_server.https?
33
- @hot = dev_server.hmr?
34
-
35
- rescue Errno::ENOENT, NoMethodError
36
- $stdout.puts "webpack dev_server configuration not found in #{@config.config_path}[#{ENV["RAILS_ENV"]}]."
37
- $stdout.puts "Please run bundle exec rails webpacker:install to install Webpacker"
38
- exit!
39
- end
40
-
41
- UNSUPPORTED_SWITCHES = %w[--host --port]
42
- private_constant :UNSUPPORTED_SWITCHES
43
- def detect_unsupported_switches!
44
- unsupported_switches = UNSUPPORTED_SWITCHES & @argv
45
- if unsupported_switches.any?
46
- $stdout.puts "The following CLI switches are not supported by Webpacker: #{unsupported_switches.join(' ')}. Please edit your command and try again."
47
- exit!
48
- end
49
-
50
- if @argv.include?("--https") && !@https
51
- $stdout.puts "Please set https: true in webpacker.yml to use the --https command line flag."
52
- exit!
53
- end
54
- end
55
-
56
- def detect_port!
57
- server = TCPServer.new(@hostname, @port)
58
- server.close
59
-
60
- rescue Errno::EADDRINUSE
61
- $stdout.puts "Another program is running on port #{@port}. Set a new port in #{@config.config_path} for dev_server"
62
- exit!
63
- end
64
-
65
- def execute_cmd
66
- env = Webpacker::Compiler.env
67
- env["WEBPACKER_CONFIG"] = @webpacker_config
68
- env["WEBPACK_SERVE"] = "true"
69
-
70
- cmd = if node_modules_bin_exist?
71
- ["#{@node_modules_bin_path}/webpack", "serve"]
72
- else
73
- ["yarn", "webpack", "serve"]
74
- end
75
-
76
- if @argv.include?("--debug-webpacker")
77
- cmd = [ "node", "--inspect-brk", "--trace-warnings" ] + cmd
78
- @argv.delete "--debug-webpacker"
79
- end
80
-
81
- cmd += ["--config", @webpack_config]
82
- cmd += ["--progress", "--color"] if @pretty
83
-
84
- cmd += ["--hot"] if @hot
85
- cmd += @argv
86
-
87
- Dir.chdir(@app_path) do
88
- Kernel.exec env, *cmd
89
- end
90
- end
91
-
92
- def node_modules_bin_exist?
93
- File.exist?("#{@node_modules_bin_path}/webpack-dev-server")
94
- end
95
- end
96
- end
1
+ # This file exists for backward compatibility
2
+ require "shakapacker/dev_server_runner"
3
+
4
+ Shakapacker.puts_deprecation_message(
5
+ Shakapacker.short_deprecation_message(
6
+ "bin/webpacker-dev-server",
7
+ "bin/shakapacker-dev-server"
8
+ )
9
+ )
@@ -1,58 +1,9 @@
1
- require "shellwords"
2
- require "webpacker/runner"
3
-
4
- module Webpacker
5
- class WebpackRunner < Webpacker::Runner
6
- WEBPACK_COMMANDS = [
7
- "help",
8
- "h",
9
- "--help",
10
- "-h",
11
- "version",
12
- "v",
13
- "--version",
14
- "-v",
15
- "info",
16
- "i"
17
- ].freeze
18
-
19
- def run
20
- env = Webpacker::Compiler.env
21
- env["WEBPACKER_CONFIG"] = @webpacker_config
22
-
23
- cmd = if node_modules_bin_exist?
24
- ["#{@node_modules_bin_path}/webpack"]
25
- else
26
- ["yarn", "webpack"]
27
- end
28
-
29
- if @argv.delete "--debug-webpacker"
30
- cmd = ["node", "--inspect-brk"] + cmd
31
- end
32
-
33
- if @argv.delete "--trace-deprecation"
34
- cmd = ["node", "--trace-deprecation"] + cmd
35
- end
36
-
37
- if @argv.delete "--no-deprecation"
38
- cmd = ["node", "--no-deprecation"] + cmd
39
- end
40
-
41
- # Webpack commands are not compatible with --config option.
42
- if (@argv & WEBPACK_COMMANDS).empty?
43
- cmd += ["--config", @webpack_config]
44
- end
45
-
46
- cmd += @argv
47
-
48
- Dir.chdir(@app_path) do
49
- Kernel.exec env, *cmd
50
- end
51
- end
52
-
53
- private
54
- def node_modules_bin_exist?
55
- File.exist?("#{@node_modules_bin_path}/webpack")
56
- end
57
- end
58
- end
1
+ # This file exists for backward compatibility
2
+ require "shakapacker/webpack_runner"
3
+
4
+ Shakapacker.puts_deprecation_message(
5
+ Shakapacker.short_deprecation_message(
6
+ "bin/webpacker",
7
+ "bin/shakapacker"
8
+ )
9
+ )
data/lib/webpacker.rb CHANGED
@@ -1,48 +1,4 @@
1
- require "active_support/core_ext/module/attribute_accessors"
2
- require "active_support/core_ext/string/inquiry"
3
- require "active_support/logger"
4
- require "active_support/tagged_logging"
1
+ # This file exists for backward compatibility
2
+ require "shakapacker"
5
3
 
6
- module Webpacker
7
- extend self
8
-
9
- DEFAULT_ENV = "production".freeze
10
-
11
- def instance=(instance)
12
- @instance = instance
13
- end
14
-
15
- def instance
16
- @instance ||= Webpacker::Instance.new
17
- end
18
-
19
- def with_node_env(env)
20
- original = ENV["NODE_ENV"]
21
- ENV["NODE_ENV"] = env
22
- yield
23
- ensure
24
- ENV["NODE_ENV"] = original
25
- end
26
-
27
- def ensure_log_goes_to_stdout
28
- old_logger = Webpacker.logger
29
- Webpacker.logger = Logger.new(STDOUT)
30
- yield
31
- ensure
32
- Webpacker.logger = old_logger
33
- end
34
-
35
- delegate :logger, :logger=, :env, :inlining_css?, to: :instance
36
- delegate :config, :compiler, :manifest, :commands, :dev_server, to: :instance
37
- delegate :bootstrap, :clean, :clobber, :compile, to: :commands
38
- end
39
-
40
- require "webpacker/instance"
41
- require "webpacker/env"
42
- require "webpacker/configuration"
43
- require "webpacker/manifest"
44
- require "webpacker/compiler"
45
- require "webpacker/commands"
46
- require "webpacker/dev_server"
47
-
48
- require "webpacker/railtie" if defined?(Rails)
4
+ Shakapacker.puts_deprecation_message(Shakapacker::DEPRECATION_MESSAGE)
@@ -0,0 +1,27 @@
1
+ /* global test expect, describe */
2
+ const { resolve } = require('path')
3
+ const { chdirWebpackerTestApp, resetEnv } = require('../utils/helpers')
4
+
5
+ const rootPath = process.cwd()
6
+ chdirWebpackerTestApp()
7
+
8
+ const config = require('../config')
9
+
10
+ describe('Backward Compatibility - Config', () => {
11
+ beforeEach(() => jest.resetModules() && resetEnv())
12
+ afterAll(() => process.chdir(rootPath))
13
+
14
+ test('x public path with asset host', () => {
15
+ process.env.RAILS_ENV = 'development'
16
+ process.env.WEBPACKER_ASSET_HOST = 'http://foo.com/'
17
+ const config = require('../config')
18
+
19
+ expect(config.publicPath).toEqual('http://foo.com/packs/')
20
+ })
21
+
22
+ test('x should allow overriding manifestPath', () => {
23
+ process.env.WEBPACKER_CONFIG = 'config/webpacker_manifest_path.yml'
24
+ const config = require('../config')
25
+ expect(config.manifestPath).toEqual(resolve('app/packs/manifest.json'))
26
+ })
27
+ })