Skip to content

Commit bbf62d0

Browse files
committed
Add better conditional messaging to check_yarn task
1 parent 07a62a9 commit bbf62d0

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ gemspec
55
gem "rails"
66
gem "rake", ">= 11.1"
77
gem "rack-proxy", require: false
8+
gem "semantic_range", require: false
89

910
group :test do
1011
gem "minitest", "~> 5.0"

Gemfile.lock

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ PATH
55
activesupport (>= 4.2)
66
rack-proxy (>= 0.6.1)
77
railties (>= 4.2)
8+
semantic_range (>= 2.3.0)
89

910
GEM
1011
remote: https://rubygems.org/
@@ -136,6 +137,7 @@ GEM
136137
rubocop-performance (1.3.0)
137138
rubocop (>= 0.68.0)
138139
ruby-progressbar (1.10.1)
140+
semantic_range (2.3.0)
139141
sprockets (4.0.0)
140142
concurrent-ruby (~> 1.0)
141143
rack (> 1, < 3)
@@ -165,6 +167,7 @@ DEPENDENCIES
165167
rake (>= 11.1)
166168
rubocop (< 0.69)
167169
rubocop-performance
170+
semantic_range
168171
webpacker!
169172

170173
BUNDLED WITH

lib/tasks/webpacker/check_yarn.rake

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require "semantic_range"
12
namespace :webpacker do
23
desc "Verifies if Yarn is installed"
34
task :check_yarn do
@@ -6,19 +7,25 @@ namespace :webpacker do
67
raise Errno::ENOENT if yarn_version.blank?
78

89
pkg_path = Pathname.new("#{__dir__}/../../../package.json").realpath
9-
yarn_requirement = JSON.parse(pkg_path.read)["engines"]["yarn"]
10+
yarn_range = JSON.parse(pkg_path.read)["engines"]["yarn"]
11+
is_valid = SemanticRange.satisfies?(yarn_version, yarn_range) rescue false
12+
is_unsupported = SemanticRange.satisfies?(yarn_version, ">=2.0.0") rescue false
1013

11-
requirement = Gem::Requirement.new(yarn_requirement)
12-
version = Gem::Version.new(yarn_version)
13-
14-
unless requirement.satisfied_by?(version)
15-
$stderr.puts "Webpacker requires Yarn #{requirement} and you are using #{version}"
16-
$stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
17-
$stderr.puts "Exiting!" && exit!
14+
unless is_valid
15+
$stderr.puts "Webpacker requires Yarn \"#{yarn_range}\" and you are using #{yarn_version}"
16+
if is_unsupported
17+
$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/"
18+
$stderr.puts "For information on using Webpacker with Yarn 2.0, see https://github.com/rails/webpacker/issues/2112"
19+
else
20+
$stderr.puts "Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/"
21+
end
22+
$stderr.puts "Exiting!"
23+
exit!
1824
end
1925
rescue Errno::ENOENT
2026
$stderr.puts "Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/"
21-
$stderr.puts "Exiting!" && exit!
27+
$stderr.puts "Exiting!"
28+
exit!
2229
end
2330
end
2431
end

webpacker.gemspec

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ Gem::Specification.new do |s|
1717

1818
s.required_ruby_version = ">= 2.3.0"
1919

20-
s.add_dependency "activesupport", ">= 4.2"
21-
s.add_dependency "railties", ">= 4.2"
22-
s.add_dependency "rack-proxy", ">= 0.6.1"
20+
s.add_dependency "activesupport", ">= 4.2"
21+
s.add_dependency "railties", ">= 4.2"
22+
s.add_dependency "rack-proxy", ">= 0.6.1"
23+
s.add_dependency "semantic_range", ">= 2.3.0"
2324

2425
s.add_development_dependency "bundler", ">= 1.3.0"
2526
s.add_development_dependency "rubocop", "< 0.69"

0 commit comments

Comments
 (0)