Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot install NPM using curl

Tags:

Receiving this error when attempting to install NPM. Any help on this error is greatly appreciated.

$ curl http://npmjs.org/install.sh | sh
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100    85    0    85    0     0   2226      0 --:--:-- --:--:-- --:--:--  4473
sh: line 1: syntax error near unexpected token `newline'
sh: line 1: `<html>Moved: <a href="https://npmjs.org/install.sh">https://npmjs.org/install.sh</a>'

Changed the command from http://... --> https:// and still no luck.


Other info:

OS: Mac OSX 10.8.2

CURL: curl 7.24.0 (x86_64-apple-darwin12.0)


So I attempted the install as a superuser and was promptly met with this mountain of text. I'm completely lost here.

$ sudo curl https://npmjs.org/install.sh | sh
Password:
#!/bin/sh

# A word about this shell script:
#
# It must work everywhere, including on systems that lack
# a /bin/bash, map 'sh' to ksh, ksh97, bash, ash, or zsh,
# and potentially have either a posix shell or bourne
# shell living at /bin/sh.
#
# See this helpful document on writing portable shell scripts:
# http://www.gnu.org/s/hello/manual/autoconf/Portable-Shell.html
#
# The only shell it won't ever work on is cmd.exe.

if [ "x$0" = "xsh" ]; then
  # run as curl | sh
  # on some systems, you can just do cat>npm-install.sh
      # which is a bit cuter.  But on others, &1 is already closed,
  # so catting to another script file won't do anything.
  curl -s https://npmjs.org/install.sh > npm-install-$$.sh
  sh npm-install-$$.sh
  ret=$?
  rm npm-install-$$.sh
  exit $ret
fi

# See what "npm_config_*" things there are in the env,
# and make them permanent.
# If this fails, it's not such a big deal.
configures="`env | grep 'npm_config_' | sed -e 's|^npm_config_||g'`"

npm_config_loglevel="error"
if [ "x$npm_debug" = "x" ]; then
  (exit 0)
else
  echo "Running in debug mode."
  echo "Note that this requires bash or zsh."
  set -o xtrace
  set -o pipefail
  npm_config_loglevel="verbose"
fi
export npm_config_loglevel

# make sure that node exists
node=`which node 2>&1`
ret=$?
    if [ $ret -eq 0 ] && [ -x "$node" ]; then
  (exit 0)
    else
  echo "npm cannot be installed without nodejs." >&2
  echo "Install node first, and then try again." >&2
  echo "" >&2
  echo "Maybe node is installed, but not in the PATH?" >&2
  echo "Note that running as sudo can change envs." >&2
  echo ""
  echo "PATH=$PATH" >&2
  exit $ret
fi

# set the temp dir
TMP="${TMPDIR}"
if [ "x$TMP" = "x" ]; then
  TMP="/tmp"
fi
TMP="${TMP}/npm.$$"
rm -rf "$TMP" || true
mkdir "$TMP"
if [ $? -ne 0 ]; then
  echo "failed to mkdir $TMP" >&2
  exit 1
fi

BACK="$PWD"

ret=0
tar="${TAR}"
if [ -z "$tar" ]; then
  tar="${npm_config_tar}"
fi
if [ -z "$tar" ]; then
  tar=`which tar 2>&1`
  ret=$?
fi

if [ $ret -eq 0 ] && [ -x "$tar" ]; then
  echo "tar=$tar"
  echo "version:"
      $tar --version
  ret=$?
fi

if [ $ret -eq 0 ]; then
  (exit 0)
else
  echo "No suitable tar program found."
      exit 1
    fi



# Try to find a suitable make
# If the MAKE environment var is set, use that.
# otherwise, try to find gmake, and then make.
# If no make is found, then just execute the necessary commands.

# XXX For some reason, make is building all the docs every time.  This
    # is an annoying source of bugs. Figure out why this happens.
MAKE=NOMAKE

if [ "x$MAKE" = "x" ]; then
  make=`which gmake 2>&1`
  if [ $? -eq 0 ] && [ -x $make ]; then
(exit 0)
  else
make=`which make 2>&1`
if [ $? -eq 0 ] && [ -x $make ]; then
  (exit 0)
else
  make=NOMAKE
fi
  fi
else
  make="$MAKE"
fi

if [ -x "$make" ]; then
  (exit 0)
else
  # echo "Installing without make. This may fail." >&2
      make=NOMAKE
fi

# If there's no bash, then don't even try to clean
if [ -x "/bin/bash" ]; then
  (exit 0)
else
  clean="no"
fi

node_version=`"$node" --version 2>&1`
ret=$?
if [ $ret -ne 0 ]; then
  echo "You need node to run this program." >&2
  echo "node --version reports: $node_version" >&2
  echo "with exit code = $ret" >&2
  echo "Please install node before continuing." >&2
  exit $ret
fi

t="${npm_install}"
    if [ -z "$t" ]; then
  # switch based on node version.
  # note that we can only use strict sh-compatible patterns here.
  case $node_version in
    0.[0123].* | v0.[0123].*)
  echo "You are using an outdated and unsupported version of" >&2
  echo "node ($node_version).  Please update node and try again." >&2
  exit 99
  ;;
v0.[45].* | 0.[45].*)
  echo "install [email protected]"
  t=1.0
  ;;
v0.[678].* | 0.[678].*)
  echo "install [email protected]"
  t=1.1
  ;;
*)
  echo "install npm@latest"
  t="latest"
  ;;
  esac
fi

# the npmca cert
cacert='
-----BEGIN CERTIFICATE-----
MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x
IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w
bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y
MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV
BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj
YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA
aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE
OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz
Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl
y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC
l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv
yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl
ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op
-----END CERTIFICATE-----
'

echo "$cacert" > "$TMP/cafile.crt"
cacert="$TMP/cafile.crt"

# need to echo "" after, because Posix sed doesn't treat EOF
# as an implied end of line.
url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
 | sed -e 's/^.*tarball":"//' \
 | sed -e 's/".*$//'`

ret=$?
if [ "x$url" = "x" ]; then
  ret=125
  # try without the -e arg to sed.
  url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
   | sed 's/^.*tarball":"//' \
   | sed 's/".*$//'`
  ret=$?
  if [ "x$url" = "x" ]; then
ret=125
  fi
fi
if [ $ret -ne 0 ]; then
  echo "Failed to get tarball url for npm/$t" >&2
  exit $ret
fi


echo "fetching: $url" >&2

cd "$TMP" \
  && curl -SsL --cacert "$cacert" "$url" \
 | $tar -xzf - \
  && rm "$cacert" \
  && cd "$TMP"/* \
  && (req=`"$node" bin/read-package-json.js package.json engines.node`
  if [ -d node_modules ]; then
    "$node" node_modules/semver/bin/semver -v "$node_version" -r "$req"
    ret=$?
  else
    "$node" bin/semver.js -v "$node_version" -r "$req"
    ret=$?
  fi
  if [ $ret -ne 0 ]; then
    echo "You need node $req to run this program." >&2
    echo "node --version reports: $node_version" >&2
    echo "Please upgrade node before continuing." >&2
    exit $ret
  fi) \
  && (ver=`"$node" bin/read-package-json.js package.json version`
  isnpm10=0
  if [ $ret -eq 0 ]; then
    req=`"$node" bin/read-package-json.js package.json engines.node`
    if [ -d node_modules ]; then
      if "$node" node_modules/semver/bin/semver -v "$ver" -r "1"
      then
        isnpm10=1
      fi
    else
      if "$node" bin/semver -v "$ver" -r ">=1.0"; then
        isnpm10=1
      fi
    fi
  fi

  ret=0
  if [ $isnpm10 -eq 1 ] && [ -f "scripts/clean-old.sh" ]; then
    if [ "x$skipclean" = "x" ]; then
      (exit 0)
    else
      clean=no
    fi
    if [ "x$clean" = "xno" ] \
        || [ "x$clean" = "xn" ]; then
      echo "Skipping 0.x cruft clean" >&2
      ret=0
    elif [ "x$clean" = "xy" ] || [ "x$clean" = "xyes" ]; then
      NODE="$node" /bin/bash "scripts/clean-old.sh" "-y"
      ret=$?
    else
      NODE="$node" /bin/bash "scripts/clean-old.sh" </dev/tty
      ret=$?
    fi
  fi

  if [ $ret -ne 0 ]; then
    echo "Aborted 0.x cleanup.  Exiting." >&2
    exit $ret
  fi) \
  && (if [ "x$configures" = "x" ]; then
    (exit 0)
  else
    echo "./configure "$configures
    echo "$configures" > npmrc
  fi) \
  && (if [ "$make" = "NOMAKE" ]; then
    (exit 0)
  elif "$make" uninstall install; then
    (exit 0)
  else
    make="NOMAKE"
  fi
  if [ "$make" = "NOMAKE" ]; then
    "$node" cli.js rm npm -gf
    "$node" cli.js install -gf
  fi) \
  && cd "$BACK" \
  && rm -rf "$TMP" \
  && echo "It worked"

ret=$?
if [ $ret -ne 0 ]; then
  echo "It failed" >&2
fi
exit $ret
like image 481
Ryan Rich Avatar asked Mar 19 '13 18:03

Ryan Rich


People also ask

Why I Cannot install npm?

On Windows, the cause of this error could be that a PATH or system variable is not correctly set. The error can also occur if you do not have npm or Node. js installed, have an outdated version, or have permission issues.

Why npm install is not working in Visual Studio code?

If you're calling npm from the VSCode terminal, you need to restart VSCode first before trying again. If you still get the error, then try restarting your computer first. The error should be gone after you restart. Now you should be able to install any npm package to your local computer with npm install command.


2 Answers

You are getting the install.sh script, you just have to execute it. Do this

curl -O https://npmjs.org/install.sh
sudo sh install.sh

Update

If you get a 301 Moved Permanently file instead, try adding -L option to follow the redirect like this:

curl -O -L https://npmjs.org/install.sh
like image 54
user568109 Avatar answered Sep 18 '22 05:09

user568109


The original command would work if you use the current location (and not the old one) (at least on my system, same settings). Meaning, use:

curl https://npmjs.org/install.sh | sh

instead of:

curl http://npmjs.org/install.sh | sh
like image 37
emem Avatar answered Sep 21 '22 05:09

emem