node: install npm using tarball.
Install npm to the expected location using the upstream tarball. This should make everyone happier. Closes Homebrew/homebrew#27479.
This commit is contained in:
parent
85cf366c68
commit
cf4171155c
1 changed files with 39 additions and 64 deletions
103
Formula/node.rb
103
Formula/node.rb
|
@ -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/'
|
||||
|
@ -46,44 +17,50 @@ 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}}
|
||||
|
||||
args << "--debug" if build.include? 'enable-debug'
|
||||
args << "--without-npm" if build.without? "npm"
|
||||
|
||||
system "./configure", *args
|
||||
system "make install"
|
||||
|
||||
if build.with? "npm"
|
||||
(lib/"node_modules/npm/npmrc").write("prefix = #{npm_prefix}\n")
|
||||
|
||||
# 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
|
||||
|
||||
if build.with? "completion"
|
||||
bash_completion.install_symlink \
|
||||
lib/"node_modules/npm/lib/utils/completion.sh" => "npm"
|
||||
end
|
||||
end
|
||||
resource "npm" do
|
||||
url "http://registry.npmjs.org/npm/-/npm-1.4.6.tgz"
|
||||
sha1 "0e151bce38e72cf2206a6299fa5164123f04256e"
|
||||
end
|
||||
|
||||
def npm_prefix
|
||||
d = "#{HOMEBREW_PREFIX}/share/npm"
|
||||
if File.directory? d
|
||||
d
|
||||
else
|
||||
HOMEBREW_PREFIX.to_s
|
||||
def install
|
||||
args = %W{--prefix=#{prefix} --without-npm}
|
||||
args << "--debug" if build.include? 'enable-debug'
|
||||
|
||||
system "./configure", *args
|
||||
system "make", "install"
|
||||
|
||||
resource("npm").stage libexec/"npm" if build.with? "npm"
|
||||
end
|
||||
|
||||
def post_install
|
||||
return if build.without? "npm"
|
||||
|
||||
node_modules = HOMEBREW_PREFIX/"lib/node_modules"
|
||||
node_modules.mkpath
|
||||
cp_r libexec/"npm", node_modules
|
||||
|
||||
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
|
||||
|
||||
if build.with? "completion"
|
||||
bash_completion.install_symlink \
|
||||
npm_root/"lib/utils/completion.sh" => "npm"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -91,11 +68,7 @@ class Node < Formula
|
|||
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
|
||||
|
@ -107,5 +80,7 @@ class Node < Formula
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue