Module: SvelteOnRails::Installer::Npm
- Defined in:
- lib/svelte_on_rails/installer/npm.rb
Class Method Summary collapse
- .inspect_package(package_name) ⇒ Object
- .install_or_update_package(package_name, version_specifier: 'latest', dev_dependency: false) ⇒ Object
- .link_local_package(package_name, local_package_url) ⇒ Object
Class Method Details
.inspect_package(package_name) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/svelte_on_rails/installer/npm.rb', line 80 def self.inspect_package(package_name) pkg = nil version = nil if File.exist?('package-lock.json') pl = JSON.parse(File.read('package-lock.json')) unless pl['packages'] raise "ERROR: package-lock.json found, but no packages found, seems to be corrupted." end pkg = pl['packages'].keys.grep(/\/#{package_name}$/).first version = pl['packages'][pkg]['version'] if pkg end if pkg { type: pkg.match(/^.*?(?=\/[^\/]*$)/).to_s, version: version&.split('.')&.map(&:to_i) } end end |
.install_or_update_package(package_name, version_specifier: 'latest', dev_dependency: false) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/svelte_on_rails/installer/npm.rb', line 5 def self.install_or_update_package(package_name, version_specifier: 'latest', dev_dependency: false) pkg = inspect_package(package_name) if pkg if pkg[:version] puts "#{package_name} already installed (#{pkg[:version].join('.')}, specified: #{version_specifier})" else puts "#{package_name} already installed ERROR: pkg is: +++\n#{pkg}\n+++\n\n, specified: #{version_specifier})" end end major_version = version_specifier.to_s.match(/^\d+(?=\.|$)/) to_do = if !pkg true elsif major_version r = pkg[:version].first != major_version.to_s.to_i if r puts "updating to major version #{major_version}" else puts "nothing to do (major version #{major_version} OK)" end r else puts 'nothing to do' false end save_dev = (dev_dependency ? ' --save-dev' : '') if to_do cmd = "npm install #{package_name}#{'@' + version_specifier if version_specifier}#{save_dev}" stdout, stderr, status = Open3.capture3(cmd) puts cmd if stderr.present? raise "ERROR #{cmd} => #{stderr}" end notice = [ (pkg ? "Updated" : "Installed"), package_name, (pkg ? "from version #{pkg[:version].join('.')}" : nil), (pkg ? "to" : nil), "@latest" ].compact.join(' ') puts notice else if pkg[:version] puts "#{package_name} already installed (#{pkg[:version].join('.')}, required: «#{version_specifier}»), skipping." else puts "#{package_name} already installed ERROR: pkg is: +++\n#{pkg}\n+++\n\n, specified: #{version_specifier})" end end end |
.link_local_package(package_name, local_package_url) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/svelte_on_rails/installer/npm.rb', line 63 def self.link_local_package(package_name, local_package_url) Dir.chdir(local_package_url) do `npm unlink` `npm link` end Dir.chdir(Rails.root) do # Instead of just `npm link`, use `npm install` to add the local package to package.json `npm install #{local_package_url} --save` stdout, stderr, status = Open3.capture3("npm ls #{package_name}") if stderr.present? raise "ERROR: npm link failed for #{package_name} => #{stderr}" end puts "Successfully linked #{package_name} to #{local_package_url}" puts " • `npm ls #{package_name}` => «#{stdout}»" end end |