From 89822e86d8da3771f5a72c2d33888af76aec9d6e Mon Sep 17 00:00:00 2001 From: Liceth Ovalles Date: Sun, 20 Nov 2016 16:35:37 -0500 Subject: Add package.json for Yarn if --yarn option is added --- railties/lib/rails/generators/app_base.rb | 52 ++++++++++++++++++++++ .../rails/generators/rails/app/app_generator.rb | 7 ++- .../generators/rails/app/templates/package.json | 7 +++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 railties/lib/rails/generators/rails/app/templates/package.json (limited to 'railties/lib/rails') diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index 2951d6c83d..f54604b54d 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/railties/lib/rails/generators/app_base.rb @@ -33,6 +33,9 @@ module Rails class_option :javascript, type: :string, aliases: "-j", desc: "Preconfigure for selected JavaScript library" + class_option :yarn, type: :boolean, default: false, + desc: "Preconfigure for assets management with Yarn" + class_option :skip_gemfile, type: :boolean, default: false, desc: "Don't create a Gemfile" @@ -414,6 +417,55 @@ module Rails bundle_command("install") if bundle_install? end + def run_yarn + if package_json_exist? + if yarn_path + say_status :run, "yarn install" + yarn_command("install") + else + say_status :warning, "yarn option passed but Yarn executable was not detected in the system.", :yellow + say_status :warning, "Download Yarn at https://yarnpkg.com/en/docs/install", :yellow + end + end + end + + def package_json_exist? + File.exist?("package.json") + end + + def yarn_path + commands = ["yarn"] + + if RbConfig::CONFIG["host_os"] =~ /mswin|cygwin/ + ENV["PATHEXT"].split(File::PATH_SEPARATOR).each do |ext| + commands << commands[0] + ext + end + end + + yarn_path = commands.find do |cmd| + paths = ENV["PATH"].split(File::PATH_SEPARATOR) + + path = paths.find do |p| + full_path = File.expand_path(cmd, p) + File.executable?(full_path) && File.file?(full_path) + end + + path && File.expand_path(cmd, path) + end + + yarn_path + end + + def yarn_command(command) + full_command = "#{yarn_path} #{command}" + + if options[:quiet] + system(full_command, out: File::NULL) + else + system(full_command) + end + end + def generate_spring_binstubs if bundle_install? && spring_install? bundle_command("exec spring binstub --all") diff --git a/railties/lib/rails/generators/rails/app/app_generator.rb b/railties/lib/rails/generators/rails/app/app_generator.rb index d6ffa2d89d..03fd298fbc 100644 --- a/railties/lib/rails/generators/rails/app/app_generator.rb +++ b/railties/lib/rails/generators/rails/app/app_generator.rb @@ -53,6 +53,10 @@ module Rails template "gitignore", ".gitignore" end + def packagejson + template "package.json" + end + def app directory "app" @@ -205,6 +209,7 @@ module Rails build(:readme) build(:rakefile) build(:configru) + build(:packagejson) if options[:yarn] build(:gitignore) unless options[:skip_git] build(:gemfile) unless options[:skip_gemfile] end @@ -355,7 +360,7 @@ module Rails end public_task :apply_rails_template, :run_bundle - public_task :generate_spring_binstubs + public_task :run_yarn, :generate_spring_binstubs def run_after_bundle_callbacks @after_bundle_callbacks.each(&:call) diff --git a/railties/lib/rails/generators/rails/app/templates/package.json b/railties/lib/rails/generators/rails/app/templates/package.json new file mode 100644 index 0000000000..78f4a2e6b0 --- /dev/null +++ b/railties/lib/rails/generators/rails/app/templates/package.json @@ -0,0 +1,7 @@ +{ + "name": "<%= app_name %>", + "private": true, + "dependencies": { + "rails-ujs": "rails/rails-ujs" + } +} -- cgit v1.2.3 From e6730c7ffbf51c985611d9281e3d080880eb3366 Mon Sep 17 00:00:00 2001 From: Liceth Ovalles Date: Sun, 20 Nov 2016 16:37:06 -0500 Subject: Add node_modules path to assets load paths when --yarn option is used --- .../generators/rails/app/templates/config/initializers/assets.rb.tt | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'railties/lib/rails') diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt index 2318cf59ff..1ba182e562 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt @@ -5,6 +5,10 @@ Rails.application.config.assets.version = '1.0' # Add additional assets to the asset load path # Rails.application.config.assets.paths << Emoji.images_path +<%- if options[:yarn] -%> +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') +<%- end -%> # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in the app/assets -- cgit v1.2.3 From 732702b56b4fcf4df374dee123fbce3b38e7a1a0 Mon Sep 17 00:00:00 2001 From: Liceth Ovalles Date: Sun, 20 Nov 2016 16:37:37 -0500 Subject: Add node_modules to default gitignore --- railties/lib/rails/generators/rails/app/templates/gitignore | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'railties/lib/rails') diff --git a/railties/lib/rails/generators/rails/app/templates/gitignore b/railties/lib/rails/generators/rails/app/templates/gitignore index 0e66cc4237..bdcbe8d629 100644 --- a/railties/lib/rails/generators/rails/app/templates/gitignore +++ b/railties/lib/rails/generators/rails/app/templates/gitignore @@ -21,5 +21,10 @@ !/tmp/.keep <% end -%> +<% if options[:yarn] -%> +# Ignore node modules. +/node_modules/* + +<% end -%> # Ignore Byebug command history file. .byebug_history -- cgit v1.2.3 From 9a95e13989380e59245d3d6fb0853953b806742c Mon Sep 17 00:00:00 2001 From: Liceth Ovalles Date: Mon, 31 Oct 2016 17:03:41 -0500 Subject: Run yarn on setup and update scripts. --- railties/lib/rails/generators/rails/app/templates/bin/setup.tt | 5 ++++- railties/lib/rails/generators/rails/app/templates/bin/update.tt | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'railties/lib/rails') diff --git a/railties/lib/rails/generators/rails/app/templates/bin/setup.tt b/railties/lib/rails/generators/rails/app/templates/bin/setup.tt index 8635e97b76..c82a922eef 100644 --- a/railties/lib/rails/generators/rails/app/templates/bin/setup.tt +++ b/railties/lib/rails/generators/rails/app/templates/bin/setup.tt @@ -16,8 +16,11 @@ chdir APP_ROOT do puts '== Installing dependencies ==' system! 'gem install bundler --conservative' system('bundle check') || system!('bundle install') -<% unless options.skip_active_record -%> +<% if options[:yarn] %> + system! 'yarn' +<% end %> +<% unless options.skip_active_record -%> # puts "\n== Copying sample files ==" # unless File.exist?('config/database.yml') # cp 'config/database.yml.sample', 'config/database.yml' diff --git a/railties/lib/rails/generators/rails/app/templates/bin/update.tt b/railties/lib/rails/generators/rails/app/templates/bin/update.tt index d385b363c6..0d8ca2f902 100644 --- a/railties/lib/rails/generators/rails/app/templates/bin/update.tt +++ b/railties/lib/rails/generators/rails/app/templates/bin/update.tt @@ -16,8 +16,11 @@ chdir APP_ROOT do puts '== Installing dependencies ==' system! 'gem install bundler --conservative' system('bundle check') || system!('bundle install') -<% unless options.skip_active_record -%> +<% if options[:yarn] %> + system! 'yarn' +<% end %> +<% unless options.skip_active_record -%> puts "\n== Updating database ==" system! 'bin/rails db:migrate' <% end -%> -- cgit v1.2.3