web-dev-qa-db-ja.com

curlを使用してNPMをインストールできない

NPMをインストールしようとしたときにこのエラーを受け取りました。このエラーに関するヘルプは大歓迎です。

$ 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>'

コマンドをhttp:// ...-> https://から変更しましたが、まだうまくいきません。


他の情報:

OS:Mac OSX 10.8.2

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


つまり、スーパーユーザーとしてインストールを試みたところ、すぐにこの大量のテキストに遭遇しました。ここでは完全に迷っています。

$ 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
20
Ryan Rich

Install.shスクリプトを取得しています。実行するだけです。これを行う

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

更新

代わりに301 Moved Permanentlyファイルを取得した場合は、-Lオプションを追加して、次のようなリダイレクトを試してください。

curl -O -L https://npmjs.org/install.sh
50
user568109

元のコマンドは、現在の場所(古い場所ではなく)を使用すると機能します(少なくとも私のシステムでは同じ設定です)。意味、使用:

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

の代わりに:

curl http://npmjs.org/install.sh | sh
2
emem

さまざまなカールオプションで何度も試しました。しかし、主な問題はnpmサイトのhttps証明書の検証です。最後にこれは私のために働きました:

curl -k -O -L https://npmjs.org/install.sh

それが他の誰かを助けることを願っています。

1

これはどういうわけかまだ壊れていますか?以下を試してください:

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

(https)www.npmjs.orgで:

$curl https://www.npmjs.org/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100  6707  100  6707    0     0   6446      0  0:00:01  0:00:01 --:--:--  6442
npm-install-606.sh: line 1: syntax error near unexpected token `newline'
npm-install-606.sh: line 1: `<html>Moved: <a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>'

OS X Maverics 10.9.1の使用

$uname -a
Darwin Esan-iMac.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

$curl --version
curl 7.30.0 (x86_64-Apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5

同様の環境で動作する必要があります。誰かがテストした???何かが足りませんか。 sudoで実行することはお勧めしません。個別のダウンロードと「sh」コマンドをまだ試していません。


編集:はい、個別にダウンロードしますcurl -O https://www.npmjs.org/install.shおよびsh install.shの所有者を変更した後、正常に機能します/usr/local/lib/node_modules/npm以前にSudoでインストールされたため。しかし、それはエラーメッセージとは何の関係もありませんか、それともできますか?

1
Esa

すでにnvmをインストールしている場合、実行する必要があるのはnvm install versionを実行することです。たとえば、バージョン8.0.0をインストールする場合は、-> $ nvm install 8.0.0を実行し、次に-> $ nvm use 8.0.0を実行します。すべてのnpmコマンドを実行できます...

0
Pascal Nitcheu

このURLに加えて: https://stackoverflow.com/a/15508817/1979882 私の場合、Debian OSの場合、シンボルリンクを作成することが重要です。

ln -s /usr/bin/nodejs /usr/bin/node

より詳細なインストールワークフローは here です。

0
Vyacheslav

-Lを追加すると役に立ちました。例えば:

curl -L http://www.npmjs.org/install.sh | sh
0
Toki Wartooth