0%

在树莓派上部署nodejs

终于有时间在树莓派上部署一个自己的小博客了,平时用惯了ubuntu,到了树莓派上,发现并没有那么简单。首先就是apt install nodejs,安装完没有npm。不过,经过一番折腾,便有了现在的小站点

安装nodejs

nodejs可以使用源码编译和二进制包来安装。考虑到树莓派的处理能力,要编译一个nodejs,太过耗时。直接选用官网提供的二进制包完成安装

安装包获取

官网上ARM的bin包有3个,分别是v6,v7和v8。而树莓派的版本是v7

1
2
$ uname -a
Linux raspberrypi 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l GNU/Linux

获取安装包

1
$ wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-armv7l.tar.xz

安装nodejs

解压缩

1
2
3
4
5
6
7
$ tar -Jxv -f node-v8.10.0-linux-armv7l.tar.xz
node-v8.10.0-linux-armv7l/
node-v8.10.0-linux-armv7l/README.md
node-v8.10.0-linux-armv7l/bin/
node-v8.10.0-linux-armv7l/bin/node
node-v8.10.0-linux-armv7l/bin/npm
...

可根据个人喜好重命名文件夹,此处重命名为node,分别验证版本信息

1
2
3
4
pi@raspberrypi:~/node $ ./bin/node -v
v8.10.0
pi@raspberrypi:~/node $ ./bin/npm -v
5.6.0

配置node和npm为全局命令

1
2
pi@raspberrypi:~/node $ sudo ln /home/pi/node/bin/node /usr/local/bin/node
pi@raspberrypi:~/node $ sudo ln -s /home/pi/node/lib/node_modules/npm/bin/npm /usr/local/bin/npm

此时执行npm会报错

1
2
3
4
5
6
pi@raspberrypi:~/node $ npm -v
module.js:471
throw err;
^

Error: Cannot find module '/usr/local/bin/node_modules/npm/bin/npm-cli.js'

需要修改/usr/local/bin/目录下的npm文件,将$basedir替换为绝对路径,此处为/home/pi/node/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh
(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix

basedir=`dirname "$0"`

case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

NODE_EXE="/home/pi/node/bin/node.exe"
if ! [ -x "$NODE_EXE" ]; then
NODE_EXE=node
fi

NPM_CLI_JS="/home/pi/node/lib/node_modules/npm/bin/npm-cli.js"

case `uname` in
*MINGW*)
NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g`
NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
if [ -f "$NPM_PREFIX_NPM_CLI_JS" ]; then
NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
fi
;;
*CYGWIN*)
NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g`
NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
if [ -f "$NPM_PREFIX_NPM_CLI_JS" ]; then
NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
fi
;;
esac

"$NODE_EXE" "$NPM_CLI_JS" "$@"

再次验证,npm已经可以正常工作