shakapacker 7.3.0.beta.1 → 8.0.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintignore +1 -1
  3. data/.eslintrc.js +29 -8
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -3
  5. data/.github/workflows/dummy.yml +6 -1
  6. data/.github/workflows/generator.yml +14 -18
  7. data/.github/workflows/node.yml +56 -0
  8. data/.github/workflows/ruby.yml +29 -17
  9. data/.node-version +1 -1
  10. data/.rubocop.yml +1 -0
  11. data/CHANGELOG.md +56 -5
  12. data/README.md +101 -48
  13. data/Rakefile +1 -7
  14. data/docs/customizing_babel_config.md +2 -2
  15. data/docs/deployment.md +13 -6
  16. data/docs/react.md +7 -13
  17. data/docs/troubleshooting.md +4 -4
  18. data/docs/using_esbuild_loader.md +1 -1
  19. data/docs/using_swc_loader.md +1 -1
  20. data/docs/v6_upgrade.md +1 -1
  21. data/docs/v8_upgrade.md +148 -0
  22. data/gemfiles/Gemfile-rails.7.1.x +12 -0
  23. data/jest.config.js +4 -0
  24. data/lib/install/config/shakapacker.yml +2 -2
  25. data/lib/install/template.rb +36 -30
  26. data/lib/shakapacker/base_strategy.rb +2 -1
  27. data/lib/shakapacker/compiler.rb +6 -21
  28. data/lib/shakapacker/configuration.rb +2 -46
  29. data/lib/shakapacker/deprecation_helper.rb +0 -78
  30. data/lib/shakapacker/dev_server.rb +1 -16
  31. data/lib/shakapacker/dev_server_runner.rb +2 -21
  32. data/lib/shakapacker/env.rb +1 -1
  33. data/lib/shakapacker/helper.rb +3 -3
  34. data/lib/shakapacker/instance.rb +1 -3
  35. data/lib/shakapacker/manifest.rb +1 -1
  36. data/lib/shakapacker/railtie.rb +7 -0
  37. data/lib/shakapacker/runner.rb +4 -18
  38. data/lib/shakapacker/utils/manager.rb +58 -0
  39. data/lib/shakapacker/utils/misc.rb +0 -12
  40. data/lib/shakapacker/version.rb +1 -1
  41. data/lib/shakapacker/version_checker.rb +9 -30
  42. data/lib/shakapacker/webpack_runner.rb +2 -21
  43. data/lib/shakapacker.rb +0 -2
  44. data/lib/tasks/shakapacker/check_binstubs.rake +12 -26
  45. data/lib/tasks/shakapacker/check_manager.rake +3 -8
  46. data/lib/tasks/shakapacker/info.rake +6 -15
  47. data/package/babel/preset.js +15 -15
  48. data/package/config.js +15 -19
  49. data/package/dev_server.js +4 -4
  50. data/package/env.js +19 -17
  51. data/package/environments/base.js +41 -24
  52. data/package/environments/development.js +6 -6
  53. data/package/environments/production.js +16 -16
  54. data/package/environments/test.js +1 -1
  55. data/package/esbuild/index.js +6 -6
  56. data/package/index.d.ts +0 -2
  57. data/package/index.js +17 -46
  58. data/package/rules/babel.js +6 -8
  59. data/package/rules/coffee.js +2 -2
  60. data/package/rules/css.js +1 -1
  61. data/package/rules/erb.js +4 -4
  62. data/package/rules/esbuild.js +5 -7
  63. data/package/rules/file.js +14 -7
  64. data/package/rules/index.js +11 -11
  65. data/package/rules/jscommon.js +8 -5
  66. data/package/rules/less.js +10 -9
  67. data/package/rules/raw.js +1 -1
  68. data/package/rules/sass.js +4 -4
  69. data/package/rules/stylus.js +12 -7
  70. data/package/rules/swc.js +5 -7
  71. data/package/swc/index.js +10 -10
  72. data/package/utils/configPath.js +3 -18
  73. data/package/utils/defaultConfigPath.js +1 -1
  74. data/package/utils/{get_style_rule.js → getStyleRule.js} +6 -6
  75. data/package/utils/helpers.js +2 -43
  76. data/package/utils/inliningCss.js +4 -3
  77. data/package/utils/snakeToCamelCase.js +5 -0
  78. data/package/webpackDevServerConfig.js +28 -25
  79. data/package.json +12 -18
  80. data/prettier.config.js +4 -0
  81. data/shakapacker.gemspec +1 -1
  82. data/spec/dummy/app/javascript/packs/application.js +1 -1
  83. data/spec/dummy/config/application.rb +3 -0
  84. data/spec/dummy/config/initializers/react_on_rails.rb +2 -2
  85. data/spec/dummy/config/shakapacker.yml +3 -4
  86. data/spec/dummy/config/webpack/commonWebpackConfig.js +0 -1
  87. data/spec/dummy/config/webpack/webpack.config.js +1 -1
  88. data/spec/dummy/package.json +2 -1
  89. data/spec/dummy/yarn.lock +2 -3
  90. data/spec/fixtures/github_url_package-lock.v1.json +1 -1
  91. data/spec/fixtures/github_url_package-lock.v2.json +2 -2
  92. data/spec/fixtures/github_url_package.json +1 -1
  93. data/spec/fixtures/github_url_pnpm-lock.v7.yaml +1 -1
  94. data/spec/fixtures/github_url_pnpm-lock.v8.yaml +1 -1
  95. data/spec/fixtures/github_url_yarn.v1.lock +1 -1
  96. data/spec/fixtures/github_url_yarn.v2.lock +2 -2
  97. data/spec/generator_specs/e2e_template/template.rb +15 -28
  98. data/spec/generator_specs/generator_spec.rb +6 -136
  99. data/spec/mounted_app/test/dummy/config/webpacker.yml +0 -1
  100. data/spec/shakapacker/compiler_spec.rb +1 -3
  101. data/spec/shakapacker/configuration_spec.rb +4 -56
  102. data/spec/shakapacker/dev_server_runner_spec.rb +19 -102
  103. data/spec/shakapacker/dev_server_spec.rb +1 -16
  104. data/spec/shakapacker/engine_rake_tasks_spec.rb +1 -16
  105. data/spec/shakapacker/helper_spec.rb +3 -3
  106. data/spec/shakapacker/instance_spec.rb +1 -3
  107. data/spec/shakapacker/rake_tasks_spec.rb +2 -14
  108. data/spec/shakapacker/shakapacker_spec.rb +0 -1
  109. data/spec/shakapacker/test_app/config/shakapacker_css_extract_ignore_order_warnings.yml +0 -1
  110. data/spec/shakapacker/test_app/config/shakapacker_manifest_path.yml +0 -1
  111. data/spec/shakapacker/test_app/config/shakapacker_nested_entries.yml +0 -1
  112. data/spec/shakapacker/test_app/config/shakapacker_other_location.yml +0 -1
  113. data/spec/shakapacker/test_app/package.json +2 -1
  114. data/spec/shakapacker/utils_manager_spec.rb +125 -0
  115. data/spec/shakapacker/version_checker_spec.rb +5 -5
  116. data/spec/shakapacker/webpack_runner_spec.rb +19 -28
  117. data/spec/support/package_json_helpers.rb +7 -4
  118. data/test/helpers.js +67 -0
  119. data/test/package/config.test.js +50 -0
  120. data/test/package/dev_server.test.js +44 -0
  121. data/test/package/development.test.js +43 -0
  122. data/test/package/env.test.js +57 -0
  123. data/test/package/environments/base.test.js +105 -0
  124. data/test/package/environments/development.test.js +50 -0
  125. data/test/package/environments/production.test.js +106 -0
  126. data/test/package/index.test.js +45 -0
  127. data/test/package/production.test.js +32 -0
  128. data/test/package/rules/babel.test.js +58 -0
  129. data/test/package/rules/esbuild.test.js +59 -0
  130. data/test/package/rules/file.test.js +81 -0
  131. data/test/package/rules/index.test.js +7 -0
  132. data/test/package/rules/raw.test.js +12 -0
  133. data/test/package/rules/swc.test.js +59 -0
  134. data/test/package/staging.test.js +31 -0
  135. data/test/package/test.test.js +28 -0
  136. data/yarn.lock +1278 -421
  137. metadata +50 -100
  138. data/.github/workflows/jest.yml +0 -33
  139. data/.github/workflows/js-lint.yml +0 -33
  140. data/.github/workflows/rubocop.yml +0 -28
  141. data/.github/workflows/ruby-backward-compatibility.yml +0 -51
  142. data/lib/install/package.json +0 -15
  143. data/lib/tasks/shakapacker/check_yarn.rake +0 -34
  144. data/lib/tasks/shakapacker/yarn_install.rake +0 -24
  145. data/lib/tasks/webpacker/binstubs.rake +0 -9
  146. data/lib/tasks/webpacker/check_binstubs.rake +0 -9
  147. data/lib/tasks/webpacker/check_node.rake +0 -9
  148. data/lib/tasks/webpacker/check_yarn.rake +0 -9
  149. data/lib/tasks/webpacker/clean.rake +0 -9
  150. data/lib/tasks/webpacker/clobber.rake +0 -11
  151. data/lib/tasks/webpacker/compile.rake +0 -9
  152. data/lib/tasks/webpacker/info.rake +0 -9
  153. data/lib/tasks/webpacker/install.rake +0 -9
  154. data/lib/tasks/webpacker/verify_config.rake +0 -9
  155. data/lib/tasks/webpacker/verify_install.rake +0 -9
  156. data/lib/tasks/webpacker/yarn_install.rake +0 -9
  157. data/lib/tasks/webpacker.rake +0 -20
  158. data/lib/webpacker/dev_server_runner.rb +0 -9
  159. data/lib/webpacker/webpack_runner.rb +0 -9
  160. data/lib/webpacker.rb +0 -4
  161. data/package/__tests__/config-bc.js +0 -27
  162. data/package/__tests__/config.js +0 -46
  163. data/package/__tests__/dev_server-bc.js +0 -46
  164. data/package/__tests__/dev_server.js +0 -46
  165. data/package/__tests__/development-bc.js +0 -66
  166. data/package/__tests__/development.js +0 -66
  167. data/package/__tests__/env-bc.js +0 -59
  168. data/package/__tests__/env.js +0 -59
  169. data/package/__tests__/index-bc.js +0 -22
  170. data/package/__tests__/index.js +0 -46
  171. data/package/__tests__/production-bc.js +0 -51
  172. data/package/__tests__/production.js +0 -51
  173. data/package/__tests__/staging-bc.js +0 -53
  174. data/package/__tests__/staging.js +0 -53
  175. data/package/__tests__/test-bc.js +0 -43
  176. data/package/__tests__/test.js +0 -43
  177. data/package/environments/__tests__/base-bc.js +0 -107
  178. data/package/environments/__tests__/base.js +0 -107
  179. data/package/environments/__tests__/development.js +0 -53
  180. data/package/environments/__tests__/production.js +0 -92
  181. data/package/rules/__tests__/__utils__/webpack.js +0 -50
  182. data/package/rules/__tests__/babel.js +0 -63
  183. data/package/rules/__tests__/esbuild.js +0 -64
  184. data/package/rules/__tests__/file.js +0 -79
  185. data/package/rules/__tests__/index.js +0 -7
  186. data/package/rules/__tests__/raw.js +0 -18
  187. data/package/rules/__tests__/swc.js +0 -63
  188. data/package/utils/snakeToCamelCase +0 -7
  189. data/spec/backward_compatibility_specs/command_spec.rb +0 -116
  190. data/spec/backward_compatibility_specs/compiler_spec.rb +0 -59
  191. data/spec/backward_compatibility_specs/compiler_strategy_spec.rb +0 -24
  192. data/spec/backward_compatibility_specs/configuration_spec.rb +0 -294
  193. data/spec/backward_compatibility_specs/dev_server_runner_spec.rb +0 -206
  194. data/spec/backward_compatibility_specs/dev_server_spec.rb +0 -47
  195. data/spec/backward_compatibility_specs/digest_strategy_spec.rb +0 -38
  196. data/spec/backward_compatibility_specs/engine_rake_tasks_spec.rb +0 -67
  197. data/spec/backward_compatibility_specs/env_spec.rb +0 -23
  198. data/spec/backward_compatibility_specs/helper_spec.rb +0 -243
  199. data/spec/backward_compatibility_specs/instance_spec.rb +0 -31
  200. data/spec/backward_compatibility_specs/manifest_spec.rb +0 -100
  201. data/spec/backward_compatibility_specs/mtime_strategy_spec.rb +0 -55
  202. data/spec/backward_compatibility_specs/rake_tasks_spec.rb +0 -41
  203. data/spec/backward_compatibility_specs/spec_helper_initializer.rb +0 -24
  204. data/spec/backward_compatibility_specs/webpack_runner_spec.rb +0 -86
  205. data/spec/backward_compatibility_specs/webpacker_spec.rb +0 -41
  206. data/spec/backward_compatibility_specs/webpacker_test_app/.gitignore +0 -2
  207. data/spec/backward_compatibility_specs/webpacker_test_app/Rakefile +0 -3
  208. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/application.js +0 -10
  209. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/generated/something.js +0 -2
  210. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/multi_entry.css +0 -4
  211. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/multi_entry.js +0 -4
  212. data/spec/backward_compatibility_specs/webpacker_test_app/bin/webpacker +0 -13
  213. data/spec/backward_compatibility_specs/webpacker_test_app/bin/webpacker-dev-server +0 -13
  214. data/spec/backward_compatibility_specs/webpacker_test_app/config/application.rb +0 -11
  215. data/spec/backward_compatibility_specs/webpacker_test_app/config/environment.rb +0 -4
  216. data/spec/backward_compatibility_specs/webpacker_test_app/config/initializers/inspect_autoload_paths.rb +0 -1
  217. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpack/webpack.config.js +0 -0
  218. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker.yml +0 -83
  219. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_css_extract_ignore_order_warnings.yml +0 -84
  220. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_defaults_fallback.yml +0 -11
  221. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_manifest_path.yml +0 -80
  222. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_nested_entries.yml +0 -83
  223. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_no_precompile.yml +0 -7
  224. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_other_location.yml +0 -85
  225. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_public_root.yml +0 -18
  226. data/spec/backward_compatibility_specs/webpacker_test_app/config.ru +0 -5
  227. data/spec/backward_compatibility_specs/webpacker_test_app/package.json +0 -13
  228. data/spec/backward_compatibility_specs/webpacker_test_app/public/packs/manifest.json +0 -58
  229. data/spec/backward_compatibility_specs/webpacker_test_app/some.config.js +0 -0
  230. data/spec/backward_compatibility_specs/webpacker_test_app/tmp/shakapacker/last-compilation-digest-production +0 -1
  231. data/spec/backward_compatibility_specs/webpacker_test_app/yarn.lock +0 -11
@@ -1,35 +1,38 @@
1
- const shakapackerDevServerYamlConfig = require('./dev_server')
2
- const snakeToCamelCase = require('./utils/snakeToCamelCase')
3
- const { outputPath: contentBase, publicPath } = require('./config')
1
+ const shakapackerDevServerYamlConfig = require("./dev_server")
2
+ const snakeToCamelCase = require("./utils/snakeToCamelCase")
3
+ const { outputPath: contentBase, publicPath } = require("./config")
4
4
 
5
5
  const webpackDevServerMappedKeys = new Set([
6
6
  // client, server, liveReload, devMiddleware are handled separately
7
- 'allowedHosts',
8
- 'bonjour',
9
- 'compress',
10
- 'headers',
11
- 'historyApiFallback',
12
- 'host',
13
- 'hot',
14
- 'http2',
15
- 'https',
16
- 'ipc',
17
- 'magicHtml',
18
- 'onAfterSetupMiddleware',
19
- 'onBeforeSetupMiddleware',
20
- 'open',
21
- 'port',
22
- 'proxy',
23
- 'server',
24
- 'setupExitSignals',
25
- 'setupMiddlewares',
26
- 'watchFiles',
27
- 'webSocketServer'
7
+ "allowedHosts",
8
+ "bonjour",
9
+ "compress",
10
+ "headers",
11
+ "historyApiFallback",
12
+ "host",
13
+ "hot",
14
+ "http2",
15
+ "https",
16
+ "ipc",
17
+ "magicHtml",
18
+ "onAfterSetupMiddleware",
19
+ "onBeforeSetupMiddleware",
20
+ "open",
21
+ "port",
22
+ "proxy",
23
+ "server",
24
+ "setupExitSignals",
25
+ "setupMiddlewares",
26
+ "watchFiles",
27
+ "webSocketServer"
28
28
  ])
29
29
 
30
30
  function createDevServerConfig() {
31
31
  const devServerYamlConfig = { ...shakapackerDevServerYamlConfig }
32
- const liveReload = devServerYamlConfig.live_reload !== undefined ? devServerYamlConfig.live_reload : !devServerYamlConfig.hmr
32
+ const liveReload =
33
+ devServerYamlConfig.live_reload !== undefined
34
+ ? devServerYamlConfig.live_reload
35
+ : !devServerYamlConfig.hmr
33
36
  delete devServerYamlConfig.live_reload
34
37
 
35
38
  const config = {
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shakapacker",
3
- "version": "7.3.0-beta.1",
3
+ "version": "8.0.0-rc.1",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "homepage": "https://github.com/shakacode/shakapacker",
6
6
  "bugs": {
@@ -19,21 +19,10 @@
19
19
  "lib/install/config/shakapacker.yml"
20
20
  ],
21
21
  "scripts": {
22
- "lint": "eslint package/",
22
+ "lint": "eslint .",
23
23
  "test": "jest"
24
24
  },
25
- "jest": {
26
- "roots": [
27
- "<rootDir>/package"
28
- ],
29
- "testPathIgnorePatterns": [
30
- "/__fixtures__/",
31
- "/__utils__/"
32
- ],
33
- "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$"
34
- },
35
25
  "dependencies": {
36
- "glob": "^7.2.0",
37
26
  "js-yaml": "^4.1.0",
38
27
  "path-complete-extname": "^1.0.0"
39
28
  },
@@ -41,14 +30,18 @@
41
30
  "babel-loader": "^8.2.4",
42
31
  "compression-webpack-plugin": "^9.0.0",
43
32
  "esbuild-loader": "^2.18.0",
44
- "eslint": "^7.32.0",
45
- "eslint-config-airbnb": "^18.2.1",
46
- "eslint-config-prettier": "^8.3.0",
33
+ "eslint": "^8.0.0",
34
+ "eslint-config-airbnb": "^19.0.0",
35
+ "eslint-config-prettier": "^9.0.0",
47
36
  "eslint-plugin-import": "^2.24.2",
37
+ "eslint-plugin-jest": "^27.9.0",
48
38
  "eslint-plugin-jsx-a11y": "^6.4.1",
39
+ "eslint-plugin-prettier": "^5.1.3",
49
40
  "eslint-plugin-react": "^7.26.0",
41
+ "eslint-plugin-react-hooks": "^4.6.0",
50
42
  "jest": "^28.1.3",
51
43
  "memory-fs": "^0.5.0",
44
+ "prettier": "^3.2.5",
52
45
  "swc-loader": "^0.1.15",
53
46
  "thenify": "^3.3.1",
54
47
  "webpack": "^5.72.0",
@@ -68,7 +61,7 @@
68
61
  "webpack": "^5.72.0",
69
62
  "webpack-assets-manifest": "^5.0.6",
70
63
  "webpack-cli": "^4.9.2 || ^5.0.0",
71
- "webpack-dev-server": "^4.9.0",
64
+ "webpack-dev-server": "^4.9.0 || ^5.0.0",
72
65
  "webpack-merge": "^5.8.0"
73
66
  },
74
67
  "peerDependenciesMeta": {
@@ -79,8 +72,9 @@
79
72
  "optional": true
80
73
  }
81
74
  },
75
+ "packageManager": "yarn@1.22.22",
82
76
  "engines": {
83
- "node": "^12.13.0 || ^14 || >=16",
77
+ "node": ">= 14",
84
78
  "yarn": ">=1 <5"
85
79
  },
86
80
  "publishConfig": {
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ semi: false,
3
+ trailingComma: "none"
4
+ }
data/shakapacker.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  "source_code_uri" => "https://github.com/shakacode/shakapacker/tree/v#{npm_version}",
16
16
  }
17
17
 
18
- s.required_ruby_version = ">= 2.6.0"
18
+ s.required_ruby_version = ">= 2.7.0"
19
19
 
20
20
  s.add_dependency "activesupport", ">= 5.2"
21
21
  s.add_dependency "package_json"
@@ -14,4 +14,4 @@
14
14
  // const images = require.context('../images', true)
15
15
  // const imagePath = (name) => images(name, true)
16
16
 
17
- console.log('Hello World from Webpacker')
17
+ console.log('Hello World from Shakapacker')
@@ -19,6 +19,9 @@ require "rails/test_unit/railtie"
19
19
  # you've limited to :test, :development, or :production.
20
20
  Bundler.require(*Rails.groups)
21
21
 
22
+ # Temp patch for dummy specs
23
+ Webpacker = Shakapacker
24
+
22
25
  module TestReactOnRailsV12SsrV2
23
26
  class Application < Rails::Application
24
27
  # Initialize configuration defaults for originally generated Rails version.
@@ -24,8 +24,8 @@ ReactOnRails.configure do |config|
24
24
  # to automatically refresh your webpack assets on every test run.
25
25
  #
26
26
  # Alternately, you can remove the `ReactOnRails::TestHelper.configure_rspec_to_compile_assets`
27
- # and set the config/webpacker.yml option for test to true.
28
- config.build_test_command = "RAILS_ENV=test bin/webpacker"
27
+ # and set the config/shakapacker.yml option for test to true.
28
+ config.build_test_command = "RAILS_ENV=test bin/shakapacker"
29
29
 
30
30
  ################################################################################
31
31
  ################################################################################
@@ -1,11 +1,11 @@
1
- # Note: You must restart bin/webpacker-dev-server for changes to take effect
1
+ # Note: You must restart bin/shakapacker-dev-server for changes to take effect
2
2
 
3
3
  default: &default
4
4
  source_path: app/javascript
5
5
  source_entry_path: packs
6
6
  public_root_path: public
7
7
  public_output_path: packs
8
- cache_path: tmp/webpacker
8
+ cache_path: tmp/shakapacker
9
9
  webpack_compile_output: true
10
10
 
11
11
  # Additional paths webpack should lookup modules
@@ -17,12 +17,11 @@ default: &default
17
17
 
18
18
  development:
19
19
  <<: *default
20
- # This is false since we're running `bin/webpacker -w` in Procfile.dev-setic
20
+ # This is false since we're running `bin/shakapacker -w` in Procfile.dev-setic
21
21
  compile: false
22
22
 
23
23
  # Reference: https://webpack.js.org/configuration/dev-server/
24
24
  dev_server:
25
- https: false
26
25
  host: localhost
27
26
  port: 3035
28
27
  # Hot Module Replacement updates modules while the application is running without a full reload
@@ -1,6 +1,5 @@
1
1
  // Common configuration applying to client and server configuration
2
2
 
3
- // const { globalMutableWebpackConfig: baseClientWebpackConfig, merge } = require('shakapacker')
4
3
  const { generateWebpackConfig, merge } = require('shakapacker')
5
4
  const commonOptions = {
6
5
  resolve: {
@@ -16,7 +16,7 @@ const webpackConfiguration = envSpecificConfig()
16
16
 
17
17
  // To debug the webpack configuration
18
18
  // 1. Uncomment debugger line below
19
- // 2. Run `bin/webpacker --debug-webpacker`
19
+ // 2. Run `bin/shakapacker --debug-shakapacker`
20
20
  // 3. Examine the webpackConfiguration variable
21
21
  // 4. Consider adding a 'debugger` line to the beginning of this file.
22
22
  // debugger
@@ -39,5 +39,6 @@
39
39
  "fork-ts-checker-webpack-plugin": "^6.5.2",
40
40
  "react-refresh": "^0.14.0",
41
41
  "webpack-dev-server": "^4.9.2"
42
- }
42
+ },
43
+ "packageManager": "yarn@1.22.24"
43
44
  }
data/spec/dummy/yarn.lock CHANGED
@@ -2571,7 +2571,7 @@ glob-to-regexp@^0.4.1:
2571
2571
  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
2572
2572
  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
2573
2573
 
2574
- glob@^7.1.3, glob@^7.1.6, glob@^7.2.0:
2574
+ glob@^7.1.3, glob@^7.1.6:
2575
2575
  version "7.2.3"
2576
2576
  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
2577
2577
  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -4060,9 +4060,8 @@ setprototypeof@1.2.0:
4060
4060
  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
4061
4061
 
4062
4062
  "shakapacker@file:.yalc/shakapacker":
4063
- version "7.0.0-rc.0"
4063
+ version "7.2.3"
4064
4064
  dependencies:
4065
- glob "^7.2.0"
4066
4065
  js-yaml "^4.1.0"
4067
4066
  path-complete-extname "^1.0.0"
4068
4067
 
@@ -102,7 +102,7 @@
102
102
  },
103
103
  "shakapacker": {
104
104
  "version": "github:shakacode/shakapacker#31854a58be49f736f3486a946b72d7e4f334e2b2",
105
- "from": "github:shakacode/shakapacker#master",
105
+ "from": "github:shakacode/shakapacker#main",
106
106
  "requires": {
107
107
  "glob": "^7.2.0",
108
108
  "js-yaml": "^4.1.0",
@@ -9,7 +9,7 @@
9
9
  "version": "1.0.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "shakapacker": "shakacode/shakapacker#master"
12
+ "shakapacker": "shakacode/shakapacker#main"
13
13
  },
14
14
  "devDependencies": {
15
15
  "right-pad": "^1.0.1"
@@ -9594,7 +9594,7 @@
9594
9594
  },
9595
9595
  "shakapacker": {
9596
9596
  "version": "git+ssh://git@github.com/shakacode/shakapacker.git#31854a58be49f736f3486a946b72d7e4f334e2b2",
9597
- "from": "shakapacker@shakacode/shakapacker#master",
9597
+ "from": "shakapacker@shakacode/shakapacker#main",
9598
9598
  "requires": {
9599
9599
  "glob": "^7.2.0",
9600
9600
  "js-yaml": "^4.1.0",
@@ -5,7 +5,7 @@
5
5
  "license": "MIT",
6
6
  "private": true,
7
7
  "dependencies": {
8
- "shakapacker": "shakacode/shakapacker#master"
8
+ "shakapacker": "shakacode/shakapacker#main"
9
9
  },
10
10
  "devDependencies": {
11
11
  "right-pad": "^1.0.1"
@@ -2,7 +2,7 @@ lockfileVersion: 5.4
2
2
 
3
3
  specifiers:
4
4
  right-pad: ^1.0.1
5
- shakapacker: shakacode/shakapacker#master
5
+ shakapacker: shakacode/shakapacker#main
6
6
 
7
7
  dependencies:
8
8
  shakapacker: github.com/shakacode/shakapacker/cdf32835d3e0949952b8b4b53063807f714f9b24
@@ -6,7 +6,7 @@ settings:
6
6
 
7
7
  dependencies:
8
8
  shakapacker:
9
- specifier: shakacode/shakapacker#master
9
+ specifier: shakacode/shakapacker#main
10
10
  version: github.com/shakacode/shakapacker/cdf32835d3e0949952b8b4b53063807f714f9b24(@babel/core@7.22.10)(@babel/plugin-transform-runtime@7.22.10)(@babel/preset-env@7.22.10)(@babel/runtime@7.22.10)(babel-loader@9.1.3)(compression-webpack-plugin@10.0.0)(terser-webpack-plugin@5.3.9)(webpack-assets-manifest@5.1.0)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-merge@5.9.0)(webpack@5.88.2)
11
11
 
12
12
  devDependencies:
@@ -91,7 +91,7 @@ right-pad@^1.0.1:
91
91
  resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0"
92
92
  integrity sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==
93
93
 
94
- shakapacker@shakacode/shakapacker#master:
94
+ shakapacker@shakacode/shakapacker#main:
95
95
  version "6.5.0"
96
96
  resolved "https://codeload.github.com/shakacode/shakapacker/tar.gz/31854a58be49f736f3486a946b72d7e4f334e2b2"
97
97
  dependencies:
@@ -124,7 +124,7 @@ __metadata:
124
124
  languageName: node
125
125
  linkType: hard
126
126
 
127
- "shakapacker@shakacode/shakapacker#master":
127
+ "shakapacker@shakacode/shakapacker#main":
128
128
  version: 6.5.0
129
129
  resolution: "shakapacker@https://github.com/shakacode/shakapacker.git#commit=31854a58be49f736f3486a946b72d7e4f334e2b2"
130
130
  dependencies:
@@ -153,7 +153,7 @@ __metadata:
153
153
  resolution: "test_app@workspace:."
154
154
  dependencies:
155
155
  right-pad: ^1.0.1
156
- shakapacker: "shakacode/shakapacker#master"
156
+ shakapacker: "shakacode/shakapacker#main"
157
157
  languageName: unknown
158
158
  linkType: soft
159
159
 
@@ -1,33 +1,20 @@
1
1
  require "shakapacker/utils/misc"
2
2
 
3
- if Shakapacker::Utils::Misc.use_package_json_gem
4
- Shakapacker::Utils::Misc.require_package_json_gem
5
-
6
- package_json = PackageJson.new
7
-
8
- # install react
9
- package_json.manager.add(["react", "react-dom", "@babel/preset-react"])
10
-
11
- # update webpack presets for react
12
- package_json.merge! do |pj|
13
- babel = pj.fetch("babel", {})
14
-
15
- babel["presets"] ||= []
16
- babel["presets"].unshift("@babel/preset-react")
17
-
18
- { "babel" => babel }
19
- end
20
- else
21
- # install react
22
- system("yarn add react react-dom @babel/preset-react")
23
-
24
- # update webpack presets for react
25
- package_json_path = Rails.root.join("./package.json")
26
- insert_into_file(
27
- package_json_path,
28
- %( "@babel/preset-react",\n),
29
- after: /"presets": \[\n/
30
- )
3
+ require "package_json"
4
+
5
+ package_json = PackageJson.new
6
+
7
+ # install react
8
+ package_json.manager.add(["react", "react-dom", "@babel/preset-react"])
9
+
10
+ # update webpack presets for react
11
+ package_json.merge! do |pj|
12
+ babel = pj.fetch("babel", {})
13
+
14
+ babel["presets"] ||= []
15
+ babel["presets"].unshift("@babel/preset-react")
16
+
17
+ { "babel" => babel }
31
18
  end
32
19
 
33
20
  # install rspec-rails
@@ -58,10 +58,12 @@ describe "Generator" do
58
58
  expect(actual_content).to eq expected_content
59
59
  end
60
60
 
61
- it "replaces package.json with the template file" do
61
+ it "ensures the 'packageManager' field is set" do
62
62
  package_json = PackageJson.read(path_in_the_app)
63
63
 
64
- expect(package_json.fetch("name", "")).to eq("app")
64
+ manager_name = fallback_manager.split("_")[0]
65
+
66
+ expect(package_json.fetch("packageManager", "")).to match(/#{manager_name}@\d+\.\d+\.\d+/)
65
67
  end
66
68
 
67
69
  it "creates webpack config directory and its files" do
@@ -161,132 +163,6 @@ describe "Generator" do
161
163
  end
162
164
  end
163
165
  end
164
-
165
- context "when not using package_json" do
166
- before :all do
167
- sh_opts = { fallback_manager: nil }
168
-
169
- sh_in_dir(sh_opts, SPEC_PATH, "cp -r '#{BASE_RAILS_APP_PATH}' '#{TEMP_RAILS_APP_PATH}'")
170
-
171
- Bundler.with_unbundled_env do
172
- sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "FORCE=true bundle exec rails shakapacker:install")
173
- end
174
- end
175
-
176
- after :all do
177
- Dir.chdir(SPEC_PATH)
178
- FileUtils.rm_rf(TEMP_RAILS_APP_PATH)
179
- end
180
-
181
- it "creates `config/shakapacker.yml`" do
182
- config_file_relative_path = "config/shakapacker.yml"
183
- actual_content = read(path_in_the_app(config_file_relative_path))
184
- expected_content = read(path_in_the_gem(config_file_relative_path))
185
-
186
- expect(actual_content).to eq expected_content
187
- end
188
-
189
- it "replaces package.json with template file" do
190
- package_json = PackageJson.read(path_in_the_app)
191
-
192
- expect(package_json.fetch("name", "")).to eq("app")
193
- end
194
-
195
- it "creates the webpack config directory and its files" do
196
- expected_files = [
197
- "webpack.config.js"
198
- ]
199
-
200
- Dir.chdir(path_in_the_app("config/webpack")) do
201
- existing_files_in_config_webpack_dir = Dir.glob("*")
202
- expect(existing_files_in_config_webpack_dir).to eq expected_files
203
- end
204
- end
205
-
206
- it "adds binstubs" do
207
- expected_binstubs = []
208
- Dir.chdir(File.join(GEM_ROOT, "lib/install/bin")) do
209
- expected_binstubs = Dir.glob("bin/*")
210
- end
211
-
212
- Dir.chdir(File.join(TEMP_RAILS_APP_PATH, "bin")) do
213
- actual_binstubs = Dir.glob("*")
214
-
215
- expect(actual_binstubs).to include(*expected_binstubs)
216
- end
217
- end
218
-
219
- it "modifies .gitignore" do
220
- actual_content = read(path_in_the_app(".gitignore"))
221
-
222
- expect(actual_content).to match ".yarn-integrity"
223
- end
224
-
225
- it 'adds <%= javascript_pack_tag "application" %>' do
226
- actual_content = read(path_in_the_app("app/views/layouts/application.html.erb"))
227
-
228
- expect(actual_content).to match '<%= javascript_pack_tag "application" %>'
229
- end
230
-
231
- it "updates `bin/setup`" do
232
- setup_file_content = read(path_in_the_app("bin/setup"))
233
-
234
- expect(setup_file_content).to match %r(^\s*system!\(['"]bin/yarn['"]\))
235
- end
236
-
237
- it "uses the shakapacker version in package.json depending on gem version" do
238
- npm_version = Shakapacker::Utils::VersionSyntaxConverter.new.rubygem_to_npm(Shakapacker::VERSION)
239
-
240
- package_json = PackageJson.read(path_in_the_app)
241
- actual_version = package_json.fetch("dependencies", {})["shakapacker"]
242
-
243
- expect(actual_version).to eq(npm_version)
244
- end
245
-
246
- it "adds Shakapacker peer dependencies to package.json" do
247
- package_json = PackageJson.read(path_in_the_app)
248
- actual_dependencies = package_json.fetch("dependencies", {}).keys
249
-
250
- expected_dependencies = %w(
251
- @babel/core
252
- @babel/plugin-transform-runtime
253
- @babel/preset-env
254
- @babel/runtime
255
- babel-loader
256
- compression-webpack-plugin
257
- terser-webpack-plugin
258
- webpack
259
- webpack-assets-manifest
260
- webpack-cli
261
- webpack-merge
262
- )
263
-
264
- expect(actual_dependencies).to include(*expected_dependencies)
265
- end
266
-
267
- it "adds Shakapacker peer dev dependencies to package.json" do
268
- package_json = PackageJson.read(path_in_the_app)
269
- actual_dev_dependencies = package_json.fetch("devDependencies", {}).keys
270
-
271
- expected_dev_dependencies = %w(
272
- webpack-dev-server
273
- )
274
-
275
- expect(actual_dev_dependencies).to include(*expected_dev_dependencies)
276
- end
277
-
278
- context "with a basic react app setup" do
279
- it "passes the test for rendering react component on the page" do
280
- sh_opts = { fallback_manager: nil }
281
-
282
- Bundler.with_unbundled_env do
283
- sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "./bin/rails app:template LOCATION=../e2e_template/template.rb")
284
-
285
- expect(sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "bundle exec rspec")).to be_truthy
286
- end
287
- end
288
- end
289
- end
290
166
  end
291
167
 
292
168
  private
@@ -306,14 +182,8 @@ describe "Generator" do
306
182
  def sort_out_package_json(opts)
307
183
  ENV["PATH"] = "#{SPEC_PATH}/fake-bin:#{ENV["PATH"]}"
308
184
 
309
- if opts[:fallback_manager].nil?
310
- ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = "yarn_classic"
311
- ENV["SHAKAPACKER_USE_PACKAGE_JSON_GEM"] = "false"
312
- else
313
- ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = opts[:fallback_manager]
314
- ENV["SHAKAPACKER_USE_PACKAGE_JSON_GEM"] = "true"
315
- ENV["PACKAGE_JSON_FALLBACK_MANAGER"] = opts[:fallback_manager]
316
- end
185
+ ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = opts[:fallback_manager]
186
+ ENV["PACKAGE_JSON_FALLBACK_MANAGER"] = opts[:fallback_manager]
317
187
  end
318
188
 
319
189
  def sh_in_dir(opts, dir, *shell_commands)
@@ -36,7 +36,6 @@ development:
36
36
 
37
37
  # Reference: https://webpack.js.org/configuration/dev-server/
38
38
  dev_server:
39
- https: false
40
39
  host: localhost
41
40
  port: 3035
42
41
  public: localhost:3035
@@ -1,4 +1,5 @@
1
1
  require_relative "spec_helper_initializer"
2
+ require "ostruct"
2
3
 
3
4
  describe "Shakapacker::Compiler" do
4
5
  it "accepts custom environment variables" do
@@ -48,12 +49,9 @@ describe "Shakapacker::Compiler" do
48
49
 
49
50
  it "accepts external env variables" do
50
51
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to be nil
51
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to be nil
52
52
 
53
53
  allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("foo.bar")
54
- allow(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", nil).and_return("/baz")
55
54
 
56
55
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to eq "foo.bar"
57
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to eq "/baz"
58
56
  end
59
57
  end