shakapacker 6.5.4 → 7.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (407) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +11 -7
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  6. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  7. data/.github/workflows/dummy.yml +21 -0
  8. data/.github/workflows/generator.yml +37 -0
  9. data/.github/workflows/jest.yml +2 -2
  10. data/.github/workflows/js-lint.yml +2 -2
  11. data/.github/workflows/rubocop.yml +1 -1
  12. data/.github/workflows/ruby-backward-compatibility.yml +39 -0
  13. data/.github/workflows/ruby.yml +5 -7
  14. data/.gitignore +6 -3
  15. data/.rspec +1 -0
  16. data/CHANGELOG.md +83 -2
  17. data/CONTRIBUTING.md +84 -18
  18. data/Gemfile.development_dependencies +3 -1
  19. data/README.md +159 -97
  20. data/Rakefile +46 -6
  21. data/config/shakapacker.yml +1 -0
  22. data/docs/deployment.md +11 -10
  23. data/docs/{developing_webpacker.md → developing_shakapacker.md} +5 -5
  24. data/docs/react.md +10 -6
  25. data/docs/style_loader_vs_mini_css.md +3 -3
  26. data/docs/troubleshooting.md +22 -18
  27. data/docs/using_esbuild_loader.md +5 -3
  28. data/docs/using_swc_loader.md +2 -2
  29. data/docs/v6_upgrade.md +9 -13
  30. data/docs/v7_upgrade.md +59 -0
  31. data/gemfiles/Gemfile-rails-edge +1 -1
  32. data/gemfiles/Gemfile-rails.6.0.x +1 -1
  33. data/gemfiles/Gemfile-rails.6.1.x +1 -1
  34. data/gemfiles/Gemfile-rails.7.0.x +1 -1
  35. data/lib/install/bin/shakapacker +13 -0
  36. data/lib/install/bin/shakapacker-dev-server +13 -0
  37. data/lib/install/binstubs.rb +3 -1
  38. data/lib/install/config/{webpacker.yml → shakapacker.yml} +28 -11
  39. data/lib/install/config/webpack/webpack.config.js +3 -2
  40. data/lib/install/template.rb +51 -34
  41. data/lib/{webpacker → shakapacker}/base_strategy.rb +2 -2
  42. data/lib/{webpacker → shakapacker}/commands.rb +4 -4
  43. data/lib/{webpacker → shakapacker}/compiler.rb +43 -15
  44. data/lib/{webpacker → shakapacker}/compiler_strategy.rb +6 -6
  45. data/lib/{webpacker → shakapacker}/configuration.rb +52 -21
  46. data/lib/shakapacker/deprecation_helper.rb +87 -0
  47. data/lib/{webpacker → shakapacker}/dev_server.rb +27 -4
  48. data/lib/{webpacker → shakapacker}/dev_server_proxy.rb +4 -4
  49. data/lib/shakapacker/dev_server_runner.rb +104 -0
  50. data/lib/{webpacker → shakapacker}/digest_strategy.rb +6 -6
  51. data/lib/{webpacker → shakapacker}/env.rb +8 -8
  52. data/lib/{webpacker → shakapacker}/helper.rb +40 -29
  53. data/lib/shakapacker/instance.rb +50 -0
  54. data/lib/{webpacker → shakapacker}/manifest.rb +14 -14
  55. data/lib/{webpacker → shakapacker}/mtime_strategy.rb +5 -5
  56. data/lib/shakapacker/railtie.rb +70 -0
  57. data/lib/shakapacker/runner.rb +28 -0
  58. data/lib/shakapacker/utils/version_syntax_converter.rb +2 -2
  59. data/lib/{webpacker → shakapacker}/version.rb +2 -2
  60. data/lib/{webpacker → shakapacker}/version_checker.rb +8 -8
  61. data/lib/shakapacker/webpack_runner.rb +67 -0
  62. data/lib/shakapacker.rb +51 -1
  63. data/lib/tasks/shakapacker/binstubs.rake +15 -0
  64. data/lib/tasks/shakapacker/check_binstubs.rake +29 -0
  65. data/lib/tasks/shakapacker/check_node.rake +31 -0
  66. data/lib/tasks/shakapacker/check_yarn.rake +33 -0
  67. data/lib/tasks/shakapacker/clean.rake +23 -0
  68. data/lib/tasks/shakapacker/clobber.rake +18 -0
  69. data/lib/tasks/shakapacker/compile.rake +28 -0
  70. data/lib/tasks/shakapacker/info.rake +21 -0
  71. data/lib/tasks/shakapacker/install.rake +17 -0
  72. data/lib/tasks/shakapacker/verify_config.rake +12 -0
  73. data/lib/tasks/shakapacker/verify_install.rake +4 -0
  74. data/lib/tasks/shakapacker/yarn_install.rake +24 -0
  75. data/lib/tasks/shakapacker.rake +18 -0
  76. data/lib/tasks/webpacker/binstubs.rake +5 -11
  77. data/lib/tasks/webpacker/check_binstubs.rake +6 -9
  78. data/lib/tasks/webpacker/check_node.rake +5 -27
  79. data/lib/tasks/webpacker/check_yarn.rake +5 -29
  80. data/lib/tasks/webpacker/clean.rake +5 -19
  81. data/lib/tasks/webpacker/clobber.rake +6 -13
  82. data/lib/tasks/webpacker/compile.rake +5 -38
  83. data/lib/tasks/webpacker/info.rake +5 -17
  84. data/lib/tasks/webpacker/install.rake +5 -13
  85. data/lib/tasks/webpacker/verify_config.rake +6 -11
  86. data/lib/tasks/webpacker/verify_install.rake +7 -2
  87. data/lib/tasks/webpacker/yarn_install.rake +5 -20
  88. data/lib/tasks/webpacker.rake +15 -13
  89. data/lib/webpacker/dev_server_runner.rb +9 -96
  90. data/lib/webpacker/webpack_runner.rb +9 -58
  91. data/lib/webpacker.rb +3 -47
  92. data/package/__tests__/config-bc.js +27 -0
  93. data/package/__tests__/config.js +6 -5
  94. data/package/__tests__/dev_server-bc.js +46 -0
  95. data/package/__tests__/dev_server.js +9 -8
  96. data/package/__tests__/development-bc.js +66 -0
  97. data/package/__tests__/development.js +36 -5
  98. data/package/__tests__/env-bc.js +59 -0
  99. data/package/__tests__/env.js +3 -2
  100. data/package/__tests__/index-bc.js +22 -0
  101. data/package/__tests__/index.js +13 -0
  102. data/package/__tests__/production-bc.js +51 -0
  103. data/package/__tests__/production.js +25 -3
  104. data/package/__tests__/staging-bc.js +53 -0
  105. data/package/__tests__/staging.js +27 -4
  106. data/package/__tests__/test-bc.js +43 -0
  107. data/package/__tests__/test.js +22 -4
  108. data/package/babel/preset.js +1 -4
  109. data/package/config.js +25 -7
  110. data/package/dev_server.js +7 -4
  111. data/package/env.js +22 -3
  112. data/package/environments/__tests__/base-bc.js +107 -0
  113. data/package/environments/__tests__/base.js +15 -15
  114. data/package/environments/__tests__/development.js +53 -0
  115. data/package/environments/__tests__/production.js +92 -0
  116. data/package/environments/base.js +5 -4
  117. data/package/environments/development.js +4 -46
  118. data/package/environments/production.js +10 -1
  119. data/package/index.js +35 -5
  120. data/package/rules/__tests__/__utils__/webpack.js +50 -0
  121. data/package/rules/__tests__/babel.js +63 -0
  122. data/package/rules/__tests__/esbuild.js +64 -0
  123. data/package/rules/__tests__/file.js +27 -0
  124. data/package/rules/__tests__/index.js +0 -4
  125. data/package/rules/__tests__/swc.js +63 -0
  126. data/package/rules/babel.js +13 -24
  127. data/package/rules/esbuild.js +2 -13
  128. data/package/rules/file.js +2 -2
  129. data/package/rules/jscommon.js +26 -0
  130. data/package/rules/swc.js +2 -13
  131. data/package/utils/configPath.js +19 -0
  132. data/package/utils/defaultConfigPath.js +2 -0
  133. data/package/utils/get_style_rule.js +5 -2
  134. data/package/utils/helpers.js +25 -2
  135. data/package/utils/inliningCss.js +7 -0
  136. data/package/utils/snakeToCamelCase +7 -0
  137. data/package/webpackDevServerConfig.js +68 -0
  138. data/package.json +11 -5
  139. data/{webpacker.gemspec → shakapacker.gemspec} +3 -3
  140. data/spec/backward_compatibility_specs/command_spec.rb +116 -0
  141. data/spec/backward_compatibility_specs/compiler_spec.rb +59 -0
  142. data/spec/backward_compatibility_specs/compiler_strategy_spec.rb +22 -0
  143. data/spec/backward_compatibility_specs/configuration_spec.rb +286 -0
  144. data/{test/dev_server_runner_test.rb → spec/backward_compatibility_specs/dev_server_runner_spec.rb} +37 -39
  145. data/spec/backward_compatibility_specs/dev_server_spec.rb +47 -0
  146. data/spec/backward_compatibility_specs/digest_strategy_spec.rb +35 -0
  147. data/spec/backward_compatibility_specs/engine_rake_tasks_spec.rb +44 -0
  148. data/spec/backward_compatibility_specs/env_spec.rb +23 -0
  149. data/spec/backward_compatibility_specs/helper_spec.rb +243 -0
  150. data/spec/backward_compatibility_specs/instance_spec.rb +31 -0
  151. data/spec/backward_compatibility_specs/manifest_spec.rb +100 -0
  152. data/spec/backward_compatibility_specs/mtime_strategy_spec.rb +55 -0
  153. data/spec/backward_compatibility_specs/rake_tasks_spec.rb +37 -0
  154. data/spec/backward_compatibility_specs/spec_helper_initializer.rb +24 -0
  155. data/{test/webpack_runner_test.rb → spec/backward_compatibility_specs/webpack_runner_spec.rb} +15 -16
  156. data/spec/backward_compatibility_specs/webpacker_spec.rb +41 -0
  157. data/spec/backward_compatibility_specs/webpacker_test_app/.gitignore +2 -0
  158. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/application.js +1 -1
  159. data/{lib/install → spec/backward_compatibility_specs/webpacker_test_app}/bin/webpacker +0 -0
  160. data/spec/backward_compatibility_specs/webpacker_test_app/config/application.rb +11 -0
  161. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker.yml +1 -1
  162. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker_css_extract_ignore_order_warnings.yml +1 -1
  163. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker_defaults_fallback.yml +1 -1
  164. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_no_precompile.yml +7 -0
  165. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_other_location.yml +85 -0
  166. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker_public_root.yml +1 -1
  167. data/spec/backward_compatibility_specs/webpacker_test_app/package.json +13 -0
  168. data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/public/packs/manifest.json +8 -0
  169. data/spec/backward_compatibility_specs/webpacker_test_app/tmp/shakapacker/last-compilation-digest-production +1 -0
  170. data/spec/dummy/.browserslistrc +1 -0
  171. data/spec/dummy/.gitignore +20 -0
  172. data/spec/dummy/.prettierrc.yaml +4 -0
  173. data/spec/dummy/Gemfile +63 -0
  174. data/spec/dummy/Procfile.dev +5 -0
  175. data/spec/dummy/Procfile.dev-static +9 -0
  176. data/spec/dummy/README.md +1 -0
  177. data/spec/dummy/Rakefile +6 -0
  178. data/spec/dummy/app/assets/config/manifest.js +2 -0
  179. data/spec/dummy/app/assets/images/.keep +0 -0
  180. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  181. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  182. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  183. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  184. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  185. data/spec/dummy/app/controllers/hello_world_controller.rb +9 -0
  186. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  187. data/spec/dummy/app/javascript/Globals.d.ts +3 -0
  188. data/spec/dummy/app/javascript/bundles/HelloWorld/components/HelloWorld.module.css +25 -0
  189. data/spec/dummy/app/javascript/bundles/HelloWorld/components/HelloWorld.tsx +47 -0
  190. data/spec/dummy/app/javascript/bundles/HelloWorld/components/HelloWorldServer.tsx +5 -0
  191. data/spec/dummy/app/javascript/bundles/HelloWorld/components/logo.svg +7 -0
  192. data/spec/dummy/app/javascript/packs/application.js +17 -0
  193. data/spec/dummy/app/javascript/packs/hello-world-bundle.ts +8 -0
  194. data/spec/dummy/app/javascript/packs/server-bundle.ts +8 -0
  195. data/spec/dummy/app/jobs/application_job.rb +7 -0
  196. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  197. data/spec/dummy/app/models/application_record.rb +3 -0
  198. data/spec/dummy/app/models/concerns/.keep +0 -0
  199. data/spec/dummy/app/views/hello_world/index.html.erb +2 -0
  200. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  201. data/spec/dummy/app/views/layouts/hello_world.html.erb +13 -0
  202. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  203. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  204. data/spec/dummy/babel.config.js +30 -0
  205. data/spec/dummy/bin/bundle +114 -0
  206. data/spec/dummy/bin/dev +30 -0
  207. data/spec/dummy/bin/dev-static +30 -0
  208. data/spec/dummy/bin/rails +9 -0
  209. data/spec/dummy/bin/rake +9 -0
  210. data/spec/dummy/bin/setup +33 -0
  211. data/spec/dummy/bin/shakapacker +13 -0
  212. data/spec/dummy/bin/shakapacker-dev-server +13 -0
  213. data/spec/dummy/bin/spring +17 -0
  214. data/spec/dummy/bin/yarn +18 -0
  215. data/spec/dummy/config/application.rb +32 -0
  216. data/spec/dummy/config/boot.rb +4 -0
  217. data/spec/dummy/config/cable.yml +10 -0
  218. data/spec/dummy/config/credentials.yml.enc +1 -0
  219. data/spec/dummy/config/database.yml +25 -0
  220. data/spec/dummy/config/environment.rb +5 -0
  221. data/spec/dummy/config/environments/development.rb +54 -0
  222. data/spec/dummy/config/environments/production.rb +106 -0
  223. data/spec/dummy/config/environments/test.rb +49 -0
  224. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  225. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  226. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  227. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  228. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  229. data/spec/dummy/config/initializers/inflections.rb +16 -0
  230. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  231. data/spec/dummy/config/initializers/react_on_rails.rb +58 -0
  232. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  233. data/spec/dummy/config/locales/en.yml +33 -0
  234. data/spec/dummy/config/puma.rb +38 -0
  235. data/spec/dummy/config/routes.rb +6 -0
  236. data/spec/dummy/config/shakapacker.yml +62 -0
  237. data/spec/dummy/config/spring.rb +6 -0
  238. data/spec/dummy/config/storage.yml +34 -0
  239. data/spec/dummy/config/webpack/ServerClientOrBoth.js +34 -0
  240. data/spec/dummy/config/webpack/clientWebpackConfig.js +15 -0
  241. data/spec/dummy/config/webpack/commonWebpackConfig.js +18 -0
  242. data/spec/dummy/config/webpack/development.js +32 -0
  243. data/spec/dummy/config/webpack/production.js +9 -0
  244. data/spec/dummy/config/webpack/serverWebpackConfig.js +116 -0
  245. data/spec/dummy/config/webpack/test.js +7 -0
  246. data/spec/dummy/config/webpack/webpack.config.js +24 -0
  247. data/spec/dummy/config.ru +5 -0
  248. data/spec/dummy/db/seeds.rb +7 -0
  249. data/spec/dummy/lib/assets/.keep +0 -0
  250. data/spec/dummy/lib/tasks/.keep +0 -0
  251. data/spec/dummy/package.json +44 -0
  252. data/spec/dummy/postcss.config.js +12 -0
  253. data/spec/dummy/public/404.html +67 -0
  254. data/spec/dummy/public/422.html +67 -0
  255. data/spec/dummy/public/500.html +66 -0
  256. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  257. data/spec/dummy/public/apple-touch-icon.png +0 -0
  258. data/spec/dummy/public/favicon.ico +0 -0
  259. data/spec/dummy/public/robots.txt +1 -0
  260. data/spec/dummy/spec/rails_helper.rb +118 -0
  261. data/spec/dummy/spec/spec_helper.rb +96 -0
  262. data/spec/dummy/spec/system/hello_world_spec.rb +19 -0
  263. data/spec/dummy/tsconfig.json +21 -0
  264. data/spec/dummy/vendor/.keep +0 -0
  265. data/spec/dummy/yarn.lock +4697 -0
  266. data/spec/generator_specs/e2e_template/files/app/controllers/home_controller.rb +4 -0
  267. data/spec/generator_specs/e2e_template/files/app/javascript/components/App.js +12 -0
  268. data/spec/generator_specs/e2e_template/files/app/javascript/packs/application.js +10 -0
  269. data/spec/generator_specs/e2e_template/files/app/views/home/index.html.erb +2 -0
  270. data/spec/generator_specs/e2e_template/files/app/views/layouts/application.html.erb +17 -0
  271. data/spec/generator_specs/e2e_template/files/config/routes.rb +3 -0
  272. data/spec/generator_specs/e2e_template/files/spec/system/test_react_component_renders_spec.rb +13 -0
  273. data/spec/generator_specs/e2e_template/template.rb +21 -0
  274. data/spec/generator_specs/generator_spec.rb +169 -0
  275. data/{test → spec}/mounted_app/test/dummy/config/application.rb +1 -1
  276. data/{test → spec}/mounted_app/test/dummy/config/webpacker.yml +11 -5
  277. data/spec/shakapacker/command_spec.rb +116 -0
  278. data/spec/shakapacker/compiler_spec.rb +59 -0
  279. data/spec/shakapacker/compiler_strategy_spec.rb +22 -0
  280. data/spec/shakapacker/configuration_spec.rb +323 -0
  281. data/spec/shakapacker/dev_server_runner_spec.rb +72 -0
  282. data/spec/shakapacker/dev_server_spec.rb +133 -0
  283. data/spec/shakapacker/digest_strategy_spec.rb +35 -0
  284. data/spec/shakapacker/engine_rake_tasks_spec.rb +43 -0
  285. data/spec/shakapacker/env_spec.rb +23 -0
  286. data/spec/shakapacker/helper_spec.rb +243 -0
  287. data/spec/shakapacker/instance_spec.rb +31 -0
  288. data/spec/shakapacker/manifest_spec.rb +100 -0
  289. data/spec/shakapacker/mtime_strategy_spec.rb +55 -0
  290. data/spec/shakapacker/rake_tasks_spec.rb +93 -0
  291. data/spec/shakapacker/shakapacker_spec.rb +41 -0
  292. data/spec/shakapacker/spec_helper_initializer.rb +24 -0
  293. data/spec/shakapacker/test_app/.gitignore +2 -0
  294. data/spec/shakapacker/test_app/Rakefile +3 -0
  295. data/spec/shakapacker/test_app/app/javascript/entrypoints/application.js +10 -0
  296. data/spec/shakapacker/test_app/app/javascript/entrypoints/generated/something.js +2 -0
  297. data/spec/shakapacker/test_app/app/javascript/entrypoints/multi_entry.css +4 -0
  298. data/spec/shakapacker/test_app/app/javascript/entrypoints/multi_entry.js +4 -0
  299. data/{test/test_app/bin/webpacker-dev-server → spec/shakapacker/test_app/bin/shakapacker} +3 -3
  300. data/{test/test_app/bin/webpacker → spec/shakapacker/test_app/bin/shakapacker-dev-server} +3 -3
  301. data/{test → spec/shakapacker}/test_app/config/application.rb +1 -1
  302. data/spec/shakapacker/test_app/config/environment.rb +4 -0
  303. data/spec/shakapacker/test_app/config/initializers/inspect_autoload_paths.rb +1 -0
  304. data/spec/shakapacker/test_app/config/shakapacker.yml +82 -0
  305. data/spec/shakapacker/test_app/config/shakapacker_css_extract_ignore_order_warnings.yml +84 -0
  306. data/spec/shakapacker/test_app/config/shakapacker_defaults_fallback.yml +11 -0
  307. data/{test/test_app/config/webpacker_other_location.yml → spec/shakapacker/test_app/config/shakapacker_manifest_path.yml} +6 -5
  308. data/spec/shakapacker/test_app/config/shakapacker_nested_entries.yml +83 -0
  309. data/spec/shakapacker/test_app/config/shakapacker_no_precompile.yml +7 -0
  310. data/spec/shakapacker/test_app/config/shakapacker_other_location.yml +85 -0
  311. data/spec/shakapacker/test_app/config/shakapacker_public_root.yml +18 -0
  312. data/spec/shakapacker/test_app/config/webpack/webpack.config.js +0 -0
  313. data/spec/shakapacker/test_app/config.ru +5 -0
  314. data/spec/shakapacker/test_app/public/packs/manifest.json +58 -0
  315. data/spec/shakapacker/test_app/some.config.js +0 -0
  316. data/spec/shakapacker/test_app/yarn.lock +11 -0
  317. data/spec/shakapacker/version_checker_spec.rb +951 -0
  318. data/spec/shakapacker/webpack_runner_spec.rb +55 -0
  319. data/spec/spec_helper.rb +98 -0
  320. data/yarn.lock +846 -844
  321. metadata +314 -213
  322. data/.github/ISSUE_TEMPLATE/feature-request.md +0 -18
  323. data/config/webpacker.yml +0 -1
  324. data/gemfiles/Gemfile-rails.5.2.x +0 -9
  325. data/lib/tasks/yarn.rake +0 -44
  326. data/lib/webpacker/instance.rb +0 -45
  327. data/lib/webpacker/railtie.rb +0 -70
  328. data/lib/webpacker/runner.rb +0 -23
  329. data/package/configPath.js +0 -3
  330. data/package/inliningCss.js +0 -7
  331. data/test/command_test.rb +0 -109
  332. data/test/compiler_strategy_test.rb +0 -27
  333. data/test/compiler_test.rb +0 -60
  334. data/test/configuration_test.rb +0 -186
  335. data/test/dev_server_test.rb +0 -47
  336. data/test/digest_strategy_test.rb +0 -33
  337. data/test/engine_rake_tasks_test.rb +0 -39
  338. data/test/env_test.rb +0 -23
  339. data/test/helper_test.rb +0 -248
  340. data/test/manifest_test.rb +0 -89
  341. data/test/mtime_strategy_test.rb +0 -42
  342. data/test/rake_tasks_test.rb +0 -37
  343. data/test/test_app/config/webpacker_no_precompile.yml +0 -7
  344. data/test/test_helper.rb +0 -33
  345. data/test/version_checker_test.rb +0 -826
  346. data/test/webpacker_test.rb +0 -49
  347. /data/{test/mounted_app/test/dummy → spec/backward_compatibility_specs/webpacker_test_app}/Rakefile +0 -0
  348. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/generated/something.js +0 -0
  349. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/multi_entry.css +0 -0
  350. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/app/packs/entrypoints/multi_entry.js +0 -0
  351. /data/{lib/install → spec/backward_compatibility_specs/webpacker_test_app}/bin/webpacker-dev-server +0 -0
  352. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/environment.rb +0 -0
  353. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/initializers/inspect_autoload_paths.rb +0 -0
  354. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpack/webpack.config.js +0 -0
  355. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker_manifest_path.yml +0 -0
  356. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/config/webpacker_nested_entries.yml +0 -0
  357. /data/{test/mounted_app/test/dummy → spec/backward_compatibility_specs/webpacker_test_app}/config.ru +0 -0
  358. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/some.config.js +0 -0
  359. /data/{test/test_app → spec/backward_compatibility_specs/webpacker_test_app}/yarn.lock +0 -0
  360. /data/{test → spec}/fixtures/beta_package-lock.v1.json +0 -0
  361. /data/{test → spec}/fixtures/beta_package-lock.v2.json +0 -0
  362. /data/{test → spec}/fixtures/beta_package.json +0 -0
  363. /data/{test → spec}/fixtures/beta_yarn.v1.lock +0 -0
  364. /data/{test → spec}/fixtures/beta_yarn.v2.lock +0 -0
  365. /data/{test → spec}/fixtures/git_url_package-lock.v1.json +0 -0
  366. /data/{test → spec}/fixtures/git_url_package-lock.v2.json +0 -0
  367. /data/{test → spec}/fixtures/git_url_package.json +0 -0
  368. /data/{test → spec}/fixtures/git_url_yarn.v1.lock +0 -0
  369. /data/{test → spec}/fixtures/git_url_yarn.v2.lock +0 -0
  370. /data/{test → spec}/fixtures/github_url_package-lock.v1.json +0 -0
  371. /data/{test → spec}/fixtures/github_url_package-lock.v2.json +0 -0
  372. /data/{test → spec}/fixtures/github_url_package.json +0 -0
  373. /data/{test → spec}/fixtures/github_url_yarn.v1.lock +0 -0
  374. /data/{test → spec}/fixtures/github_url_yarn.v2.lock +0 -0
  375. /data/{test → spec}/fixtures/relative_path_package-lock.v1.json +0 -0
  376. /data/{test → spec}/fixtures/relative_path_package-lock.v2.json +0 -0
  377. /data/{test → spec}/fixtures/relative_path_package.json +0 -0
  378. /data/{test → spec}/fixtures/relative_path_yarn.v1.lock +0 -0
  379. /data/{test → spec}/fixtures/relative_path_yarn.v2.lock +0 -0
  380. /data/{test → spec}/fixtures/semver_caret_package-lock.v1.json +0 -0
  381. /data/{test → spec}/fixtures/semver_caret_package-lock.v2.json +0 -0
  382. /data/{test → spec}/fixtures/semver_caret_package.json +0 -0
  383. /data/{test → spec}/fixtures/semver_caret_yarn.v1.lock +0 -0
  384. /data/{test → spec}/fixtures/semver_caret_yarn.v2.lock +0 -0
  385. /data/{test → spec}/fixtures/semver_exact_package-lock.v1.json +0 -0
  386. /data/{test → spec}/fixtures/semver_exact_package-lock.v2.json +0 -0
  387. /data/{test → spec}/fixtures/semver_exact_package.json +0 -0
  388. /data/{test → spec}/fixtures/semver_exact_yarn.v1.lock +0 -0
  389. /data/{test → spec}/fixtures/semver_exact_yarn.v2.lock +0 -0
  390. /data/{test → spec}/fixtures/semver_tilde_package-lock.v1.json +0 -0
  391. /data/{test → spec}/fixtures/semver_tilde_package-lock.v2.json +0 -0
  392. /data/{test → spec}/fixtures/semver_tilde_package.json +0 -0
  393. /data/{test → spec}/fixtures/semver_tilde_yarn.v1.lock +0 -0
  394. /data/{test → spec}/fixtures/semver_tilde_yarn.v2.lock +0 -0
  395. /data/{test → spec}/fixtures/without_package-lock.v1.json +0 -0
  396. /data/{test → spec}/fixtures/without_package-lock.v2.json +0 -0
  397. /data/{test → spec}/fixtures/without_package.json +0 -0
  398. /data/{test → spec}/fixtures/without_yarn.v1.lock +0 -0
  399. /data/{test → spec}/fixtures/without_yarn.v2.lock +0 -0
  400. /data/{test → spec}/mounted_app/Rakefile +0 -0
  401. /data/{test/test_app → spec/mounted_app/test/dummy}/Rakefile +0 -0
  402. /data/{test → spec}/mounted_app/test/dummy/bin/rails +0 -0
  403. /data/{test → spec}/mounted_app/test/dummy/bin/rake +0 -0
  404. /data/{test → spec}/mounted_app/test/dummy/config/environment.rb +0 -0
  405. /data/{test/test_app → spec/mounted_app/test/dummy}/config.ru +0 -0
  406. /data/{test → spec}/mounted_app/test/dummy/package.json +0 -0
  407. /data/{test → spec/shakapacker}/test_app/package.json +0 -0
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require "webpacker/version"
2
+ require "shakapacker/version"
3
3
 
4
- module Webpacker
4
+ module Shakapacker
5
5
  class VersionChecker
6
6
  attr_reader :node_package_version
7
7
 
@@ -27,7 +27,7 @@ module Webpacker
27
27
 
28
28
  uses_wildcard = node_package_version.semver_wildcard?
29
29
 
30
- if !Webpacker.config.ensure_consistent_versioning? && (uses_wildcard || !versions_match)
30
+ if !Shakapacker.config.ensure_consistent_versioning? && (uses_wildcard || !versions_match)
31
31
  check_failed = if uses_wildcard
32
32
  "Semver wildcard without a lockfile detected"
33
33
  else
@@ -35,13 +35,13 @@ module Webpacker
35
35
  end
36
36
 
37
37
  warn <<-MSG.strip_heredoc
38
- Webpacker::VersionChecker - #{check_failed}
38
+ Shakapacker::VersionChecker - #{check_failed}
39
39
 
40
40
  You are currently not checking for consistent versions of shakapacker gem and npm package. A version mismatch or usage of semantic versioning wildcard (~ or ^) without a lockfile has been detected.
41
41
 
42
42
  Version mismatch can lead to incorrect behavior and bugs. You should ensure that both the gem and npm package dependencies are locked to the same version.
43
43
 
44
- You can enable the version check by setting `ensure_consistent_versioning: true` in your `webpacker.yml` file.
44
+ You can enable the version check by setting `ensure_consistent_versioning: true` in your `shakapacker.yml` file.
45
45
 
46
46
  Checking for gem and npm package versions mismatch or wildcard will be enabled by default in the next major version of shakapacker.
47
47
  MSG
@@ -68,18 +68,18 @@ module Webpacker
68
68
  end
69
69
 
70
70
  def raise_differing_versions_warning
71
- msg = "**ERROR** Webpacker: Webpacker gem and node package versions do not match\n#{common_error_msg}"
71
+ msg = "**ERROR** Shakapacker: Shakapacker gem and node package versions do not match\n#{common_error_msg}"
72
72
  raise msg
73
73
  end
74
74
 
75
75
  def raise_node_semver_version_warning
76
- msg = "**ERROR** Webpacker: Your node package version for shakapacker contains a "\
76
+ msg = "**ERROR** Shakapacker: Your node package version for shakapacker contains a "\
77
77
  "^ or ~\n#{common_error_msg}"
78
78
  raise msg
79
79
  end
80
80
 
81
81
  def gem_version
82
- Webpacker::VERSION
82
+ Shakapacker::VERSION
83
83
  end
84
84
 
85
85
  def gem_major_minor_patch_version
@@ -0,0 +1,67 @@
1
+ require "shellwords"
2
+ require "shakapacker/runner"
3
+
4
+ module Shakapacker
5
+ class WebpackRunner < Shakapacker::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 = Shakapacker::Compiler.env
21
+ env["SHAKAPACKER_CONFIG"] = @shakapacker_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.include?("--debug-webpacker")
30
+ Shakapacker.puts_deprecation_message(
31
+ Shakapacker.short_deprecation_message(
32
+ "--debug-webpacker",
33
+ "--debug-shakapacker"
34
+ )
35
+ )
36
+ end
37
+
38
+ if @argv.delete("--debug-shakapacker") || @argv.delete("--debug-webpacker")
39
+ cmd = ["node", "--inspect-brk"] + cmd
40
+ end
41
+
42
+ if @argv.delete "--trace-deprecation"
43
+ cmd = ["node", "--trace-deprecation"] + cmd
44
+ end
45
+
46
+ if @argv.delete "--no-deprecation"
47
+ cmd = ["node", "--no-deprecation"] + cmd
48
+ end
49
+
50
+ # Webpack commands are not compatible with --config option.
51
+ if (@argv & WEBPACK_COMMANDS).empty?
52
+ cmd += ["--config", @webpack_config]
53
+ end
54
+
55
+ cmd += @argv
56
+
57
+ Dir.chdir(@app_path) do
58
+ Kernel.exec env, *cmd
59
+ end
60
+ end
61
+
62
+ private
63
+ def node_modules_bin_exist?
64
+ File.exist?("#{@node_modules_bin_path}/webpack")
65
+ end
66
+ end
67
+ end
data/lib/shakapacker.rb CHANGED
@@ -1 +1,51 @@
1
- require "webpacker"
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"
5
+
6
+ module Shakapacker
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 ||= Shakapacker::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 = Shakapacker.logger
29
+ Shakapacker.logger = Logger.new(STDOUT)
30
+ yield
31
+ ensure
32
+ Shakapacker.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 "shakapacker/instance"
41
+ require "shakapacker/env"
42
+ require "shakapacker/configuration"
43
+ require "shakapacker/manifest"
44
+ require "shakapacker/compiler"
45
+ require "shakapacker/commands"
46
+ require "shakapacker/dev_server"
47
+ require "shakapacker/deprecation_helper"
48
+
49
+ require "shakapacker/railtie" if defined?(Rails)
50
+
51
+ Webpacker = Shakapacker
@@ -0,0 +1,15 @@
1
+ binstubs_template_path = File.expand_path("../../install/binstubs.rb", __dir__).freeze
2
+ bin_path = ENV["BUNDLE_BIN"] || Rails.root.join("bin")
3
+
4
+ namespace :shakapacker do
5
+ desc "Installs Shakapacker binstubs in this application"
6
+ task binstubs: [:check_node, :check_yarn] do |task|
7
+ prefix = task.name.split(/#|shakapacker:binstubs/).first
8
+
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
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ namespace :shakapacker do
2
+ desc "Verifies that bin/shakapacker is present"
3
+ task :check_binstubs do
4
+ verify_file_existance("bin/shakapacker", "bin/webpacker")
5
+ verify_file_existance("bin/shakapacker-dev-server", "bin/webpacker-dev-server")
6
+ end
7
+ end
8
+
9
+ def verify_file_existance(main_file, alternative_file)
10
+ unless File.exist?(Rails.root.join(main_file))
11
+ if File.exist?(Rails.root.join(alternative_file))
12
+ Shakapacker.puts_deprecation_message(
13
+ Shakapacker.short_deprecation_message(
14
+ alternative_file,
15
+ main_file
16
+ )
17
+ )
18
+ else
19
+ puts <<~MSG
20
+ Couldn't find shakapacker binstubs!
21
+ Possible solutions:
22
+ - Ensure you have run `rails shakapacker:install`.
23
+ - Run `rails shakapacker:binstubs` if you have already installed shakapacker.
24
+ - Ensure the `bin` directory, `bin/shakapacker`, and `bin/shakapacker-dev-server` are not included in .gitignore.
25
+ MSG
26
+ exit!
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ require "semantic_range"
2
+ namespace :shakapacker 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?
8
+
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 "Shakapacker 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
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ require "semantic_range"
2
+ namespace :shakapacker 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?
8
+
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 "Shakapacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
19
+ if is_unsupported
20
+ $stderr.puts "This version of Shakapacker 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
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ $stdout.sync = true
2
+
3
+ require "shakapacker/configuration"
4
+
5
+ namespace :shakapacker do
6
+ desc "Remove old compiled bundles"
7
+ task :clean, [:keep, :age] => ["shakapacker:verify_install", :environment] do |_, args|
8
+ Shakapacker.ensure_log_goes_to_stdout do
9
+ Shakapacker.clean(Integer(args.keep || 2), Integer(args.age || 3600))
10
+ end
11
+ end
12
+ end
13
+
14
+ if Shakapacker.config.shakapacker_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["shakapacker:clean"].invoke
19
+ end
20
+ else
21
+ Rake::Task.define_task("assets:clean" => "shakapacker:clean")
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ require "shakapacker/configuration"
2
+
3
+ namespace :shakapacker do
4
+ desc "Remove the webpack compiled output directory"
5
+ task clobber: ["shakapacker:verify_config", :environment] do
6
+ Shakapacker.clobber
7
+ $stdout.puts "Removed webpack output path directory #{Shakapacker.config.public_output_path}"
8
+ end
9
+ end
10
+
11
+ if Shakapacker.config.shakapacker_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["shakapacker:clobber"].invoke
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ $stdout.sync = true
2
+
3
+ namespace :shakapacker do
4
+ desc "Compile JavaScript packs using webpack for production with digests"
5
+ task compile: ["shakapacker:verify_install", :environment] do
6
+ Shakapacker.with_node_env(ENV.fetch("NODE_ENV", "production")) do
7
+ Shakapacker.ensure_log_goes_to_stdout do
8
+ exit! unless Shakapacker.compile
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ def invoke_shakapacker_compile_in_assets_precompile_task
15
+ Rake::Task["assets:precompile"].enhance do |task|
16
+ prefix = task.name.split(/#|assets:precompile/).first
17
+
18
+ Rake::Task["#{prefix}shakapacker:compile"].invoke
19
+ end
20
+ end
21
+
22
+ if Shakapacker.config.shakapacker_precompile?
23
+ if Rake::Task.task_defined?("assets:precompile")
24
+ invoke_shakapacker_compile_in_assets_precompile_task
25
+ else
26
+ Rake::Task.define_task("assets:precompile" => ["shakapacker:compile"])
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ require "shakapacker/version"
2
+
3
+ namespace :shakapacker do
4
+ desc "Provide information on Shakapacker'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 "Shakapacker: #{Shakapacker::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`}"
15
+
16
+ $stdout.puts "Is bin/shakapacker present?: #{File.exist? 'bin/shakapacker'}"
17
+ $stdout.puts "Is bin/shakapacker-dev-server present?: #{File.exist? 'bin/shakapacker-dev-server'}"
18
+ $stdout.puts "Is bin/yarn present?: #{File.exist? 'bin/yarn'}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ install_template_path = File.expand_path("../../install/template.rb", __dir__).freeze
2
+ bin_path = ENV["BUNDLE_BIN"] || Rails.root.join("bin")
3
+
4
+ namespace :shakapacker do
5
+ desc "Install Shakapacker in this application"
6
+ task install: [:check_node, :check_yarn] do |task|
7
+ Shakapacker::Configuration.installing = true
8
+
9
+ prefix = task.name.split(/#|shakapacker:install/).first
10
+
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
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ namespace :shakapacker do
2
+ desc "Verifies if the Shakapacker config is present"
3
+ task :verify_config do
4
+ unless Shakapacker.config.config_path.exist?
5
+ path = Shakapacker.config.config_path.relative_path_from(Pathname.new(pwd)).to_s
6
+ $stderr.puts "Configuration #{path} file not found. \n"\
7
+ "Make sure shakapacker:install is run successfully before " \
8
+ "running dependent tasks"
9
+ exit!
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ namespace :shakapacker do
2
+ desc "Verifies if Shakapacker is installed"
3
+ task verify_install: [:verify_config, :check_node, :check_yarn, :check_binstubs]
4
+ end
@@ -0,0 +1,24 @@
1
+ namespace :shakapacker 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
9
+
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
23
+ end
24
+ end
@@ -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