今天登录服务器,想部署一个node项目,于是习惯性的git clone项目代码,然后使用 npm i 安装依赖,这个时候问题出现了。
探究过程
【备注】如果不想看过程,只想看结果,请直接拉到最后。
npm直接报了个错,错误信息如下:
ubuntu@VM-4-14-ubuntu:~$ npm -v /usr/lib/node_modules/npm/lib/cli.js:35 throw err ^ TypeError: Class extends value undefined is not a constructor or null at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/path-scurry/dist/cjs/index.js:134:40) at Module._compile (node:internal/modules/cjs/loader:1275:14) at Module._extensions..js (node:internal/modules/cjs/loader:1329:10) at Module.load (node:internal/modules/cjs/loader:1133:32) at Module._load (node:internal/modules/cjs/loader:972:12) at Module.require (node:internal/modules/cjs/loader:1157:19) at require (node:internal/modules/helpers:119:18) at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/glob/dist/cjs/glob.js:5:23) at Module._compile (node:internal/modules/cjs/loader:1275:14) at Module._extensions..js (node:internal/modules/cjs/loader:1329:10) Node.js v19.9.0
当时因为这个服务器上正在运行着其他项目,所以不太敢直接操作,折中把本地的 node_modules 文件夹直接拷到服务器上勉强先把项目跑起来了。但是这样其实不太好,毕竟如果使用了其他包管理器,有些软链接、硬链接就容易出问题。
于是乎,终于抽出时间了,来研究解决一下这个问题。毕竟是自己的服务器,也没办法赖其他人,如果是公司的服务器说不定哪个同事就被我拉来背锅了(偷笑)。
仔细想了想,发现这个问题的时候其实有段时间没动服务器了,可能是因为当时手贱执行了一下apt upgrade把所有能更新的东西都更到最新了。
在网上搜了一圈,发现遇到这个报错的也不都是npm的问题,和我遇到相同问题的人基本上都是重装解决的,那我也重装一下试试。
首先明确了我的node是使用 sudo apt-get install nodejs 安装的,那首先就是尝试如下命令:
# 这个命令没用,不要无脑直接复制执行 sudo apt-get remove nodejs sudo apt-get install nodejs
一通操作下来,还是不行。
那可能是我本地的node_modules的依赖中文件出问题了,那删一下试试:
cd /usr/lib/node_modules/npm # 执行前确保你知道自己在做什么,因执行这条命令造成的数据丢失请自行承担责任 sudo rm -rf node_modules
好了,现在npm没了
ubuntu@VM-4-14-ubuntu:~$ npm -v /usr/lib/node_modules/npm/lib/cli.js:35 throw err ^ Error: Cannot find module 'semver/functions/satisfies' Require stack: - /usr/lib/node_modules/npm/lib/cli.js - /usr/lib/node_modules/npm/bin/npm-cli.js at Module._resolveFilename (node:internal/modules/cjs/loader:1090:15) at Module._load (node:internal/modules/cjs/loader:934:27) at Module.require (node:internal/modules/cjs/loader:1157:19) at require (node:internal/modules/helpers:119:18) at module.exports (/usr/lib/node_modules/npm/lib/cli.js:41:21) at Object.<anonymous> (/usr/lib/node_modules/npm/bin/npm-cli.js:2:25) at Module._compile (node:internal/modules/cjs/loader:1275:14) at Module._extensions..js (node:internal/modules/cjs/loader:1329:10) at Module.load (node:internal/modules/cjs/loader:1133:32) at Module._load (node:internal/modules/cjs/loader:972:12) { code: 'MODULE_NOT_FOUND', requireStack: [ '/usr/lib/node_modules/npm/lib/cli.js', '/usr/lib/node_modules/npm/bin/npm-cli.js' ] }
既然都没了,那再重装一下得了:
sudo apt-get reinstall nodejs
终于,功夫不负有心人,成了!
ubuntu@VM-4-14-ubuntu:~$ npm -v 9.6.3
解决方案
所以,整理一下上面的内容,大概就是:
如果你是和我类似使用的Linux系统(我用的Ubuntu 20.04 ),同时使用了以下命令+apt install安装的node
curl -fsSL https://deb.nodesource.com/setup_19.x | sudo -E bash - &&\
那么你可以在做好充足备份的前提之下,通过以下命令删除 node_modules 文件夹
cd /usr/lib/node_modules/npm # 执行前确保你知道自己在做什么,因执行这条命令造成的数据丢失请自行承担责任 sudo rm -rf node_modules
然后使用以下命令重新安装node
sudo apt-get reinstall nodejs
不出所料应该就可以了
ubuntu@VM-4-14-ubuntu:~$ npm -v 9.6.3
最后,记得更新一下npm
sudo npm i -g npm
更新后的版本(在我写这篇博客到你看到这篇博客期间npm估计会有更新,所以你的版本可能比我更新)
ubuntu@VM-4-14-ubuntu:~$ npm -v 9.8.1
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。