Skip to content

Commit d1cff23

Browse files
justin808claude
andcommitted
Address code review comments
1. Revert package-scripts.yml change (npm->yarn) - This file doesn't exist on master, so the change shouldn't be included 2. Add javascript_compiler setting to shakapacker.yml template - Adds configuration option to choose between 'babel' or 'swc' - Defaults to 'babel' for wider ecosystem support - Documents the tradeoffs between the two compilers 3. Fix swc/babel dependency management - Move swc packages (@swc/core, swc-loader) from devDependencies to dependencies - Make swc and babel mutually exclusive based on shakapacker.yml setting - Add using_swc? helper method to check javascript_compiler configuration - When using swc, install swc packages instead of babel packages This ensures proper dependency installation based on the chosen JavaScript compiler. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 9f254fb commit d1cff23

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

lib/generators/react_on_rails/base_generator.rb

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,21 @@ def add_react_dependencies
171171
react_deps = %w[
172172
react
173173
react-dom
174-
@babel/preset-react
175174
prop-types
176-
babel-plugin-transform-react-remove-prop-types
177-
babel-plugin-macros
178175
]
176+
177+
# Add compiler-specific dependencies
178+
# If using swc, add swc packages; otherwise add babel packages
179+
react_deps += if using_swc?
180+
%w[@swc/core swc-loader]
181+
else
182+
%w[
183+
@babel/preset-react
184+
babel-plugin-transform-react-remove-prop-types
185+
babel-plugin-macros
186+
]
187+
end
188+
179189
return if add_npm_dependencies(react_deps)
180190

181191
success = system("npm", "install", *react_deps)
@@ -201,15 +211,23 @@ def add_dev_dependencies
201211
dev_deps = %w[
202212
@pmmmwh/react-refresh-webpack-plugin
203213
react-refresh
204-
@swc/core
205-
swc-loader
206214
]
207215
return if add_npm_dependencies(dev_deps, dev: true)
208216

209217
success = system("npm", "install", "--save-dev", *dev_deps)
210218
handle_npm_failure("development dependencies", dev_deps, dev: true) unless success
211219
end
212220

221+
def using_swc?
222+
# Check shakapacker.yml for javascript_compiler setting
223+
# Default to babel if not specified
224+
shakapacker_config_path = File.join(destination_root, "config", "shakapacker.yml")
225+
return false unless File.exist?(shakapacker_config_path)
226+
227+
config_content = File.read(shakapacker_config_path)
228+
config_content.include?("javascript_compiler: swc")
229+
end
230+
213231
def install_js_dependencies
214232
# Detect which package manager to use
215233
success = if File.exist?(File.join(destination_root, "yarn.lock"))

lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ default: &default
4747
# https://webpack.js.org/guides/build-performance/#avoid-production-specific-tooling
4848
useContentHash: false
4949

50+
# Compiler to use for JavaScript: 'babel' or 'swc'
51+
# SWC is faster but Babel has more plugins and wider ecosystem support
52+
# Default: babel
53+
javascript_compiler: babel
54+
5055
# Setting the asset host here will override Rails.application.config.asset_host.
5156
# Here, you can set different asset_host per environment. Note that
5257
# SHAKAPACKER_ASSET_HOST will override both configurations.

package-scripts.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ scripts:
2626
# 4. If it failed, print an error message (still follow https://docs.npmjs.com/cli/v8/using-npm/scripts#best-practices).
2727
script: >
2828
[ -f packages/react-on-rails/lib/ReactOnRails.full.js ] ||
29-
(yarn run build >/dev/null 2>&1 || true) &&
29+
(npm run build >/dev/null 2>&1 || true) &&
3030
[ -f packages/react-on-rails/lib/ReactOnRails.full.js ] ||
3131
{ echo 'Building react-on-rails seems to have failed!'; }
3232

0 commit comments

Comments
 (0)