Skip to content

Commit

Permalink
node: install npm using tarball.
Browse files Browse the repository at this point in the history
Install npm to the expected location using the upstream tarball. This
should make everyone happier.

Closes Homebrew#27479.
  • Loading branch information
MikeMcQuaid authored and ehershey committed Apr 4, 2014
1 parent 12037e3 commit 46a87b3
Showing 1 changed file with 32 additions and 57 deletions.
89 changes: 32 additions & 57 deletions Library/Formula/node.rb
Original file line number Diff line number Diff line change
@@ -1,34 +1,5 @@
require 'formula'

class NpmRequirement < Requirement
fatal true

def modules_folder
"#{HOMEBREW_PREFIX}/lib/node_modules"
end

def message; <<-EOS.undent
Beginning with 0.8.0, this recipe now comes with npm.
It appears you already have npm installed at #{modules_folder}/npm.
To use the npm that comes with this recipe, first uninstall npm with
`npm uninstall npm -g`, then run this command again.
If you would like to keep your installation of npm instead of
using the one provided with homebrew, install the formula with
the `--without-npm` option.
EOS
end

satisfy :build_env => false do
begin
path = Pathname.new("#{modules_folder}/npm/bin/npm")
path.realpath.to_s.include?(HOMEBREW_CELLAR)
rescue Errno::ENOENT
true
end
end
end

# Note that x.even are stable releases, x.odd are devel releases
class Node < Formula
homepage 'http://nodejs.org/'
Expand All @@ -46,56 +17,58 @@ class Node < Formula
option 'without-npm', 'npm will not be installed'
option 'without-completion', 'npm bash completion will not be installed'

depends_on NpmRequirement => :recommended
depends_on :python

fails_with :llvm do
build 2326
end

def install
args = %W{--prefix=#{prefix}}
resource "npm" do
url "http://registry.npmjs.org/npm/-/npm-1.4.6.tgz"
sha1 "0e151bce38e72cf2206a6299fa5164123f04256e"
end

def install
args = %W{--prefix=#{prefix} --without-npm}
args << "--debug" if build.include? 'enable-debug'
args << "--without-npm" if build.without? "npm"

system "./configure", *args
system "make install"
system "make", "install"

resource("npm").stage libexec/"npm" if build.with? "npm"
end

if build.with? "npm"
(lib/"node_modules/npm/npmrc").write("prefix = #{npm_prefix}\n")
def post_install
return if build.without? "npm"

# Link npm manpages
Pathname.glob("#{lib}/node_modules/npm/man/*") do |man|
dir = send(man.basename)
man.children.each { |file| dir.install_symlink(file) }
end
node_modules = HOMEBREW_PREFIX/"lib/node_modules"
node_modules.mkpath
cp_r libexec/"npm", node_modules

if build.with? "completion"
bash_completion.install_symlink \
lib/"node_modules/npm/lib/utils/completion.sh" => "npm"
end
npm_root = node_modules/"npm"
npmrc = npm_root/"npmrc"
npmrc.delete if npmrc.exist?
npmrc.write("prefix = #{HOMEBREW_PREFIX}\n")

npm_root.cd { system "make", "install" }
system "#{HOMEBREW_PREFIX}/bin/npm", "update", "npm", "-g"

Pathname.glob(npm_root/"man/*") do |man|
dir = send(man.basename)
man.children.each {|file| dir.install_symlink(file) }
end
end

def npm_prefix
d = "#{HOMEBREW_PREFIX}/share/npm"
if File.directory? d
d
else
HOMEBREW_PREFIX.to_s
if build.with? "completion"
bash_completion.install_symlink \
npm_root/"lib/utils/completion.sh" => "npm"
end
end

def caveats
if build.without? "npm"; <<-end.undent
Homebrew has NOT installed npm. If you later install it, you should supplement
your NODE_PATH with the npm module folder:
#{npm_prefix}/lib/node_modules
end
elsif not ENV['PATH'].split(':').include? "#{npm_prefix}/bin"; <<-end.undent
Probably you should amend your PATH to include npm-installed binaries:
#{npm_prefix}/bin
#{HOMEBREW_PREFIX}/lib/node_modules
end
end
end
Expand All @@ -107,5 +80,7 @@ def caveats
output = `#{bin}/node #{path}`.strip
assert_equal "hello", output
assert_equal 0, $?.exitstatus

system "#{HOMEBREW_PREFIX}/bin/npm", "install", "npm" if build.with? "npm"
end
end

0 comments on commit 46a87b3

Please sign in to comment.