From b6d81359f0a958d27770280900cfb55fbbd62d5e Mon Sep 17 00:00:00 2001 From: Dominyk Tiller Date: Wed, 31 May 2017 04:57:28 +0100 Subject: [PATCH] language/node: adjustments for npm 5.0.x Goes with: https://github.com/Homebrew/homebrew-core/pull/14085 --- Library/Homebrew/language/node.rb | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/language/node.rb b/Library/Homebrew/language/node.rb index ab2206a5b4..b9abaea547 100644 --- a/Library/Homebrew/language/node.rb +++ b/Library/Homebrew/language/node.rb @@ -4,6 +4,17 @@ module Language "cache=#{HOMEBREW_CACHE}/npm_cache\n" end + def self.pack_for_installation + # Homebrew assumes the buildpath/testpath will always be disposable + # and from npm 5.0.0 the logic changed so that when a directory is + # fed to `npm install` only symlinks are created linking back to that + # directory, consequently breaking that assumption. We require a tarball + # because npm install creates a "real" installation when fed a tarball. + output = Utils.popen_read("npm pack").chomp + raise "npm failed to pack #{Dir.pwd}" unless $?.exitstatus.zero? + output + end + def self.setup_npm_environment npmrc = Pathname.new("#{ENV["HOME"]}/.npmrc") # only run setup_npm_environment once per formula @@ -14,7 +25,7 @@ module Language npmrc.write npm_cache_config # explicitly use our npm and node-gyp executables instead of the user # managed ones in HOMEBREW_PREFIX/lib/node_modules which might be broken - ENV.prepend_path "PATH", Formula["node"].opt_libexec/"npm/bin" + ENV.prepend_path "PATH", Formula["node"].opt_libexec/"bin" end def self.std_npm_install_args(libexec) @@ -22,8 +33,16 @@ module Language # tell npm to not install .brew_home by adding it to the .npmignore file # (or creating a new one if no .npmignore file already exists) open(".npmignore", "a") { |f| f.write("\n.brew_home\n") } + + pack = pack_for_installation + # npm install args for global style module format installed into libexec - ["--verbose", "--global", "--prefix=#{libexec}", "."] + %W[ + --verbose + --global + --prefix=#{libexec} + #{Dir.pwd}/#{pack} + ] end def self.local_npm_install_args