无法使用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://更改了命令,仍然没有运气。


其他信息:

操作系统: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 npm@1.0" t=1.0 ;; v0.[678].* | 0.[678].*) echo "install npm@1.1" 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 

你得到了install.sh脚本,你只需要执行它。 做这个

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

更新

如果你得到一个301移动永久文件,尝试添加-L选项按照这样的redirect:

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

如果你使用当前位置(而不是旧的)(至less在我的系统中,相同的设置),原始命令将起作用。 含义,使用:

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

代替:

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

这仍然打破了? 尝试以下内容:

 $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 

它应该与类似的环境工作; 有人testing? 我错过了什么 记住用sudo运行是不鼓励的? 还没有尝试单独下载和“sh”命令。


编辑:是的,单独下载curl -O https://www.npmjs.org/install.shsh install.sh工作正常后,更改所有者为/usr/local/lib/node_modules/npm因为以前安装与sudo 。 但它与错误信息无关,还是可以呢?

我已经多次尝试各种curl选项。 但主要的问题是npm网站的https证书validation。 最后这对我有效:

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

希望它能帮助别人。

除了这个url: https : //stackoverflow.com/a/15508817/1979882就我而言,对于Debian操作系统来说,创build一个符号链接是非常重要的:

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

更详细的安装工作stream程在这里 。

-L帮助我。 例如:

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