CentOS安装Node.js以及JSDOM跳坑记

笔者在一台 CentOS 7.9 的服务器上使用常规的安装命令:sudo yum install node 来安装 Node.js,到最后系统提示:

bash 复制代码
Error: Package: 2:nodejs-20.14.0-1nodesource.x86_64 (nodesource-nodejs)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

此时运行 npm -v 和 node -v 都报错:

bash 复制代码
node: relocation error: /lib64/libnode.so.93: 
symbol FIPS_selftest, version OPENSSL_1_1_0g not defined in file libcrypto.so.1.1 with link time reference

当前 Node.js 的最新版是21,看来又是低版本的 CentOS 水土不服的顽疾造成的。既然系统不支持最新版的 Node.js,那就只能退而求次选择低版本的 Node.js。

解决办法:通过nvm(Node.js虚拟版本管理器)选择低版本16.11.1安装

bash 复制代码
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
nvm install 16.11.1
验证安装:

运行 node -v 返回:v16.11.1。

运行 npm -v 返回:v8.0.0。

说明安装成功。

Node.js v16.11.1 安装 JSDOM 报错问题

运行 npm install jsdom -g 时提示很多版本过期的信息,如:

bash 复制代码
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'jsdom@24.1.0',
npm WARN EBADENGINE   required: { node: '>=18' },
npm WARN EBADENGINE   current: { node: 'v16.11.1', npm: '8.0.0' }
npm WARN EBADENGINE }
......

在安装 JSDOM 之前,建议全局安装npx工具以确保版本管理的简易性:

bash 复制代码
npm install -g npx

为了使 JSDOM 能适应在 Node.js v16.11.1,只能选择安装旧版本 JSDOM,如16.x版,命令如下:

bash 复制代码
npm install jsdom@16.x -g

注:jsdom后面加上 @16.x,而且这里的 x 就是字母 x,不必改为具体的数字

验证安装:

1. 运行 npm list -g
2. 运行 node,在 Node.js 里输入下列语句:
javascript 复制代码
const { JSDOM } = require('jsdom');
const dom = new JSDOM(`<!DOCTYPE html><html><body></body></html>`);
const window = dom.window;
const document = window.document;
console.log(window);
console.log(document);

正常情况下结果如下图:

相关推荐
Chenyu_3108 小时前
DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么
linux·服务器·网络·缓存
陈让然9 小时前
WSL 桥接设置静态IP(快速)
linux·网络·ubuntu
乔旭伟9 小时前
Linux 服务器备份实战:一致性快照、日志归档与恢复演练
linux·运维·服务器
乔旭伟10 小时前
Linux 服务器安全加固实战:SSH、防火墙、补丁与入侵排查
linux·服务器·安全
刘胡子大叔11 小时前
备份包只有 1.5K?
linux·服务器·网络
无足鸟ICT11 小时前
【RHCA+】RPM包验证和数字证书
linux·运维·服务器
erzong23111 小时前
Linux操作系统:线程概念与控制
linux·算法
星恒随风11 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
小范的技术工坊11 小时前
Linux应用开发(文件IO)
linux·stm32·单片机
小范的技术工坊11 小时前
Linux应用开发(文件属性)
linux·运维·服务器