怎样安装Node.js

2018年8月7日 | 分类: 【技术】

【介绍】

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用。

Node.js 的包管理器 npm,是全球最大的开源库生态系统。

参考:https://www.nodeapp.cn/
参考:https://developer.aliyun.com/article/760687

【安装:使用 NVM (Node Version Manager)】

NVM(Node version manager)是Node.js的版本管理软件,使用户可以轻松在Node.js各个版本间进行切换。

卸载旧版本(可选但建议,可避免冲突):

sudo apt remove nodejs npm
sudo apt autoremove

运行 NVM 安装脚本:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

激活NVM:重新打开终端,或执行以下命令使 NVM 立即生效

source ~/.bashrc

列出Node.js的所有版本:

nvm list-remote

当前最新稳定版本:v24.18.0 (Latest LTS: Krypton)

安装指定 Node.js版本:

nvm install v24.18.0

设为默认版本,新终端将自动使用:

nvm alias default v24.18.0

验证安装:

node -v   # 输出 v24.18.0

查看 npm 版本:

npm -v    # 输出 11.16.0

查看已安装Node.js版本:

nvm ls

输出:

         v6.9.5
->       v7.4.0
         system
stable -> 7.4 (-> v7.4.0) (default)
unstable -> 6.9 (-> v6.9.5) (default)

切换Node.js版本:

nvm use v6.9.5

输出:

Now using node v6.9.5

NVM的更多操作请参考帮助文档:

nvm help

【安装:使用 NodeSource 官方仓库(推荐)】

卸载旧版本(可选但建议,可避免冲突):

sudo apt remove nodejs npm
sudo apt autoremove

添加 NodeSource 仓库:运行以下命令,脚本会自动配置 Node.js 20.x 的 apt 仓库。

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -

安装 Node.js:

sudo apt install -y nodejs

安装 Node.js 时会自动附带匹配版本的 npm。

验证安装:

node -v   # 应输出 v20.x.x
npm -v    # 应输出对应版本

关于 npm 全局安装权限:

如果使用 NodeSource 方法安装,之后使用 npm install -g 安装全局包时可能会遇到权限错误。
建议将 npm 的全局目录配置到用户空间来避免此问题:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

【部署】

参考:http://www.tfan.org/nodejs-running-on-port-80-with-apache/
参考:https://blog.csdn.net/gaoxuaiguoyi/article/details/50927661
参考:https://blog.csdn.net/ruzhuxiaogu/article/details/52663657
参考:http://stackoverflow.com/questions/12701259/how-to-make-a-node-js-application-run-permanently
参考:https://zfanw.com/blog/apache-proxy-node-js.html
参考:https://help.aliyun.com/document_detail/50775.html
参考:https://www.zhihu.com/question/19887245
参考:https://www.jianshu.com/p/ee935729f49c
参考:https://segmentfault.com/a/1190000010205995

可使用 Apache 的 Proxy mode 使 Node.js 和 Apache 共用 80 端口。

首先,在 Apache 的配置文件中,开启 mod_proxy 和 mod_proxy_http:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

在vhost文件中添加:

<VirtualHost *:80>
	ServerName amon.org
	ServerAlias www.amon.org
	ProxyRequests off
	<Proxy *>
		Order deny,allow
		Allow from all
	</Proxy>
	<Location />
		ProxyPass https://amon.org:3000/
		ProxyPassReverse https://amon.org:3000/
	</Location>
	DocumentRoot /usr/local/apache2/htdocs/amon.org
	<Directory "/usr/local/apache2/htdocs/amon.org">
		AllowOverride All
	</Directory>
	ErrorLog /usr/local/apache2/htdocs/logs/error.log
	CustomLog /usr/local/apache2/htdocs/logs/access.log combined
</VirtualHost>

写一个index.js文件

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
 
app.get('/', function(req, res){
	res.send('<h1>Welcome Realtime Server</h1>');
});
 
http.listen(3000, function(){
	console.log('listening on *:3000');
});

运行一下 Node.js 脚本:

node index.js

报错:

...
Error: Cannot find module 'express'
...

参考:http://www.cnblogs.com/yumianhu/p/3732668.html

到当前项目目录下执行命令:

npm link express

报错:

...
Error: Cannot find module 'socket.io'
...

参考:http://www.cnblogs.com/yumianhu/p/3732668.html

到当前项目目录下执行命令:

npm link socket.io

输出:

listening on *:3000

重启httpd,然后访问配置的虚拟主机 www.amon.org ,页面显示:

Welcome Realtime Server

证明部署成功。

排错:不同的Node.js版本对应不同的gzip版本。

参考:https://amon.org/gzip

gzip版本符合要求,返回:

######################################################################## 100.0%
Checksums empty
Now using node v7.4.0

gzip版本不符合要求,返回:

######################################################################## 100.0%
Checksums empty

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Binary download failed, trying source.