diff options
Diffstat (limited to 'Library/Homebrew/language/node.rb')
| -rw-r--r-- | Library/Homebrew/language/node.rb | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/Library/Homebrew/language/node.rb b/Library/Homebrew/language/node.rb index ab2206a5b..b9abaea54 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 |
