@@ -37,6 +37,10 @@ class InstallGenerator < Rails::Generators::Base
3737 # Removed: --skip-shakapacker-install (Shakapacker is now a required dependency)
3838
3939 def run_generators
40+ # Set environment variable to skip validation during generator run
41+ # This is inherited by all invoked generators
42+ ENV [ "REACT_ON_RAILS_SKIP_VALIDATION" ] = "true"
43+
4044 if installation_prerequisites_met? || options . ignore_warnings?
4145 invoke_generators
4246 add_bin_scripts
@@ -55,6 +59,7 @@ def run_generators
5559 GeneratorMessages . add_error ( error )
5660 end
5761 ensure
62+ ENV . delete ( "REACT_ON_RAILS_SKIP_VALIDATION" )
5863 print_generator_messages
5964 end
6065
@@ -430,8 +435,7 @@ def add_js_dependencies
430435 def add_react_on_rails_package
431436 major_minor_patch_only = /\A \d +\. \d +\. \d +\z /
432437
433- # Always use direct npm install with --save-exact to ensure exact version matching
434- # The package_json gem doesn't support --save-exact flag
438+ # Use detected package manager with --save-exact flag to ensure exact version matching
435439 react_on_rails_pkg = if ReactOnRails ::VERSION . match? ( major_minor_patch_only )
436440 "react-on-rails@#{ ReactOnRails ::VERSION } "
437441 else
@@ -441,7 +445,8 @@ def add_react_on_rails_package
441445 end
442446
443447 puts "Installing React on Rails package..."
444- success = system ( "npm" , "install" , "--save-exact" , react_on_rails_pkg )
448+ package_manager , exact_flag , add_command = detect_package_manager_and_exact_flag
449+ success = system ( package_manager , add_command , exact_flag , react_on_rails_pkg )
445450 @ran_direct_installs = true if success
446451 handle_npm_failure ( "react-on-rails package" , [ react_on_rails_pkg ] ) unless success
447452 end
@@ -461,7 +466,8 @@ def add_react_dependencies
461466 return
462467 end
463468
464- success = system ( "npm" , "install" , *react_deps )
469+ package_manager , _exact_flag , add_command = detect_package_manager_and_exact_flag
470+ success = system ( package_manager , add_command , *react_deps )
465471 @ran_direct_installs = true if success
466472 handle_npm_failure ( "React dependencies" , react_deps ) unless success
467473 end
@@ -479,7 +485,8 @@ def add_css_dependencies
479485 return
480486 end
481487
482- success = system ( "npm" , "install" , *css_deps )
488+ package_manager , _exact_flag , add_command = detect_package_manager_and_exact_flag
489+ success = system ( package_manager , add_command , *css_deps )
483490 @ran_direct_installs = true if success
484491 handle_npm_failure ( "CSS dependencies" , css_deps ) unless success
485492 end
@@ -497,7 +504,10 @@ def add_dev_dependencies
497504 return
498505 end
499506
500- success = system ( "npm" , "install" , "--save-dev" , *dev_deps )
507+ package_manager , _exact_flag , add_command = detect_package_manager_and_exact_flag
508+ # For dev dependencies, we need to add the --dev or -D flag depending on the package manager
509+ dev_flag = package_manager == "npm" ? "--save-dev" : "-D"
510+ success = system ( package_manager , add_command , dev_flag , *dev_deps )
501511 @ran_direct_installs = true if success
502512 handle_npm_failure ( "development dependencies" , dev_deps , dev : true ) unless success
503513 end
0 commit comments