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 -vnode -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);

正常情况下结果如下图:

相关推荐
添砖java‘’9 小时前
vim高效编辑:从入门到精通
linux·编辑器·操作系统·vim
tryCbest10 小时前
CentOS部署Docker容器
linux·docker·centos
qyhua12 小时前
【Linux运维实战】彻底修复 CVE-2011-5094 漏洞
linux·运维·安全
坠金12 小时前
linux/centos迁移conda文件夹
linux·centos·conda
纳于大麓13 小时前
Kotlin基础语法
linux·windows·kotlin
九皇叔叔13 小时前
Linux Shell 正则表达式中的 POSIX 字符集:用法与实战
linux·运维·正则表达式
東雪蓮☆13 小时前
K8s 平滑升级
linux·运维·云原生·kubernetes
---学无止境---14 小时前
Linux中进程创建和缓存对象初始化fork_init、proc_caches_init和buffer_init
linux
惘嘫、冋渞15 小时前
CentOS 7 下 Nginx 编译后热重启方案
chrome·nginx·centos
qq_1838028715 小时前
Linux内核idr数据结构使用
linux·运维·服务器