Sha256: cc4e2500cdc0d0423ed5480dfa917ea5e4850365f9925c08c7915916c4aaa7f2
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
# frozen_string_literal: true require "package_json" module Shakapacker module Utils class Manager class Error < StandardError; end MANAGER_LOCKS = { "bun" => "bun.lockb", "npm" => "package-lock.json", "pnpm" => "pnpm-lock.yaml", "yarn" => "yarn.lock" } # Emits a warning if it's not obvious what package manager to use def self.error_unless_package_manager_is_obvious! return unless PackageJson.read.fetch("packageManager", nil).nil? guessed_binary = guess_binary return if guessed_binary == "npm" raise Error, <<~MSG You don't have "packageManager" set in your package.json meaning that Shakapacker will use npm but you've got a #{MANAGER_LOCKS[guessed_binary]} file meaning you probably want to be using #{guessed_binary} instead. To make this happen, set "packageManager" in your package.json to #{guessed_binary}@#{guess_version} MSG end # Guesses the binary of the package manager to use based on what lockfiles exist # # @return [String] def self.guess_binary MANAGER_LOCKS.find { |_, lock| File.exist?(lock) }&.first || "npm" end # Guesses the version of the package manager to use by calling `<manager> --version` # # @return [String] def self.guess_version require "open3" command = "#{guess_binary} --version" stdout, stderr, status = Open3.capture3(command) unless status.success? raise Error, "#{command} failed with exit code #{status.exitstatus}: #{stderr}" end stdout.chomp end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
shakapacker-8.0.2 | lib/shakapacker/utils/manager.rb |
shakapacker-8.0.1 | lib/shakapacker/utils/manager.rb |