笔者在一台 CentOS 7.9 的服务器上使用常规的安装命令:sudo yum install node 来安装 Node.js,到最后系统提示:
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
都报错:
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安装
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
时提示很多版本过期的信息,如:
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工具以确保版本管理的简易性:
npm install -g npx
为了使 JSDOM 能适应在 Node.js v16.11.1,只能选择安装旧版本 JSDOM,如16.x版,命令如下:
npm install jsdom@16.x -g
注:jsdom后面加上 @16.x,而且这里的 x 就是字母 x,不必改为具体的数字
验证安装:
1. 运行 npm list -g
2. 运行 node
,在 Node.js 里输入下列语句:
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);
正常情况下结果如下图: