升级了一下 Nodejs,出大问题了

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

升级了一下 Nodejs,出大问题了

自己的 blog基于 Hexo ,由于各种东西都一直没更新(除了内容文章),所以一直也没升级 node.js ,也没有 node.js 相关的项目。最近突然有个项目需要用到 latest 版本的 node ,就在官网更新了,然后我自己的 blog 就没法再 Generate 了。

MyUsername[@My-Laptop](/user/My-Laptop) MINGW64 /d/blog (main)
$ hexo clean&&hexo g
(node:7552) [DEP0128] DeprecationWarning: Invalid 'main' field in 'D:\blog\node_modules\jsftp\package.json' of './jsftp.js'. Please either fix that or report it to the module author
(Use `node --trace-deprecation ...` to show where the warning was created)
INFO  Deleted database.
INFO  Deleted public folder.
(node:2648) [DEP0128] DeprecationWarning: Invalid 'main' field in 'D:\blog\node_modules\jsftp\package.json' of './jsftp.js'. Please either fix that or report it to the module author
(Use `node --trace-deprecation ...` to show where the warning was created)
INFO  Start processing
D:\blog\source\_data\bangumis.json
INFO  167 bangumis have been loaded
INFO  Generating urls for last 100 posts

旧的 node 版本是node-v12.18.1-x64,新的版本我装的是node-v16.13.2-x64,然后我把node_modules文件夹删掉后执行npm install,也会报错,日志有点长,点击此处获取。

不知道是否能隔离两个项目的 node 版本(系统是 Windows 10 Pro )或者让 blog 支持新版本的 node 。


33 回复

关键词:hexo nodejs14

解决方法:回滚 nodejs 到 12


都不用 nvm ?

升级下 hexo 呗

node 真别随便升级,硬要升级的话,确保 package-lock.json 完好无损

推荐一个更优秀的替代品 https://github.com/Schniz/fnm ,nvm 严重拖慢 terminal 启动速度

Node 毕竟是个运行时,这和 Java 升个级、.NET 升个级一个道理,一定是会出大大小小的问题的,不能把它等同于工具库升个级这么简单

这是哪个依赖还在坚守 node-sass…

不如试试 docker ,把这些都丢到容器里跑,环境就稳定了

可以装多个 node 吧,n 切换下

我也是因为这个原因,所以把 Hexo 换了。

nvm 确实会对终端启动速度有影响,我用 zsh ,可以用 zsh-nvm 这个 plugin 实现 nvm 的 Lazy Loading ,速度提升明显。

歪个楼,我一直觉得 hugo 挺好用的🙈

node-sass 的问题,我一般用 sass 代替 node-sass 就行了
但是 hexo 没用过,不知道怎么搞

前端随便升级 node 可是一个禁忌

最近重装 ghost 发展 node 真滴难,动不动就升级

没用过 node ,谁能解释下为啥会出现 Invalid ‘main’ field ?

没怎么接到过 node 的项目不太清楚能不能升级
怎么说确保 package-lock.json 完好无损?
但我没想到 node 它不能多版本共存啊,.net 和 java 都能多版本共存
确实,应该学学用 Docker 做项目了
不清楚,node 有办法列出依赖树吗
先存了,之后看看,我这目前没感觉 nvm 明显拖慢 terminal 的速度。话说 nvm 的原理不应该类似于手动更改环境变量吗,为什么会拖慢终端的速度?
好的,感谢,已经用在生产环境了

#21 Node 是最容易共存的,没有系统级依赖,配个 PATH 就能切不同版本

上面这么多人都没点开接一下看完整版本的日志吗,明明就是 Python 错误。

你升级 node 之后,npm install 时需要重新编译 node-sass ,而你的 node-sass 版本太旧,里面的编译脚本还是 Python 2 语法,而你系统的 Python 的是 3.9 。print 语句已经在 Python 3 删除,Python 3 只有 print 函数。

所以两个方法:

1. 把系统 Python 降级会 Python 2 ,不过 Python 2 早已经废弃了。
2. 修改 package.json, 把 node-sass 版本升级一下, 起码是迁移到 Python 3 的版本。

作为后端,负责一个 admin 项目,然后收到 dependabot 的提示升级 chore(deps): bump axios from 0.21.1 to 0.21.2 的 PR ,然后 merge 了,然后页面挂了。
一脸懵逼,这兼容性也太差了。


个人同样推荐 fnm ,nvm 启动太慢,虽然在 Linux/macOS 下还可以接受,但是 WSL 下非常慢。
nvm-windows 的操作逻辑和 nvm 有很大不同,而且印象中还缺功能,比如用 nvm install 16 ,它只会安装 16.0.0 版本。
fnm 则没有上述问题,它跨平台,支持多种 shell (包括 cmd 和 PowerShell)。

前端随便升 node ,前端项目用 node 就跑个工具链,支持最新版 /最新 lts 版都是没问题的。当然维护古老工具链除外。

Hexo (需要升级到 5.0 以上版本):
* 使用 hexo init blog 创建一个新项目
* 把新项目中 package.json 的依赖覆盖当前项目的依赖

Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust
https://github.com/Schniz/fnm

用这个试一试~

当然是用 docker 啦,docker 才算通用的解决方案。不然以后多 node 应用你还是可能会遇上同样问题

这就是若干年前为什么从 hexo 迁移的 hugo 的原因之一。。当时还总结了下,供题主参考:
- https://liujiacai.net/blog/2020/12/05/hexo-to-hugo/

如果你只是用个 webpack ,完全没必要升级

Node14 后的 esm 还是值得升级的

升级 Node.js 后遇到问题通常与版本兼容性、依赖包不匹配或配置错误有关。以下是一些排查和解决步骤:

  1. 确认 Node.js 版本: 首先,确认你升级后的 Node.js 版本。可以通过命令行运行 node -v 查看当前版本。

  2. 检查依赖包: 升级 Node.js 后,一些依赖包可能不再兼容。运行 npm outdated 查看哪些包需要更新。然后,运行 npm update 尝试更新这些包。

  3. 查看错误日志: 查看应用程序的错误日志,找出具体的错误信息。这可以帮助你更准确地定位问题。

  4. 回退 Node.js 版本: 如果问题依旧无法解决,考虑回退到之前的 Node.js 版本。可以使用 nvm(Node Version Manager)来管理多个 Node.js 版本。安装 nvm 后,可以使用以下命令安装和切换版本:

    nvm install <previous_version>
    nvm use <previous_version>
    
  5. 重建项目: 如果回退版本后问题依旧,尝试删除 node_modules 文件夹和 package-lock.json 文件,然后重新运行 npm install

  6. 代码示例: 以下是一个简单的 nvm 使用示例:

    # 安装 nvm
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    
    # 安装特定版本的 Node.js
    nvm install 14.17.0
    
    # 使用特定版本的 Node.js
    nvm use 14.17.0
    

希望这些步骤能帮助你解决问题。如果问题依旧,请提供更详细的错误信息以便进一步分析。

回到顶部