网上的文章,我看了些,抄来抄去,质量不敢恭维
查了很多资料之后有了点眉目,这是正儿八经版的Hexo 更新指南

今日可是说是花了一天时间在服务器上

早上写完Aria2远程下载
下午写V2Ray部署
然后既然玩了一天了,想着把Hexo也更新了吧
但上次从2.X 更新到3.5,也不知道为什么,硬是重新安装了一遍才算完
于是这次想找能不能update一样的升级,结果网上教程看得我云里雾里

先说一下,包和模块,我不太能区分,感觉就是,包相当于一个项目,有多个模块组成,下面提到的,嗯能理解就尽量理解吧~

相关命令的含义

首先搞明白输入的命令是干啥用的,别瞎输

npm outdated:自带,查看是否有新版本,及是否标记更新(改写package.json)
npm-check:一个包,检查是否有更新、错误以及不再使用的包,列出改动幅度
npm-check -u:包命令,检查是否有新版本并选择是否升级(交互式)
npm-upgrade:一个包,检查是否有新版本并是否写到package.json(注意,只是写json,不执行升级)
npm update:自带,小版本更新并改json(npm 5.0后)
npm install:自带,强大也复杂,看这里吧

关于升级操作

  • 首先有-g和没有-g分别对应全局包和本地(目录内)包
  • npm-check并不会帮你更新包,需要搭配-u
  • 但它会给你列出有变动的包,并以颜色区分变动幅度,简单讲就是大更新/小更新
  • npm i亦即npm install,一般来讲是安装操作,如果不加任何指令,默认是安装package.json里的所有模块及其依赖,用作升级的时候需要先使用npm-upgrade标记需要升级的包,然后npm install安装所有包,根据上文介绍,该命令会跳过已有的版本一致的包,故实现了更新
  • 也可以用npm i <name>一个一个升级,没毛病,此时不需要npm-upgrade
  • --save的作用是写json,实际上用处不大,因为,你可能不知道怎么用。
  • 有一个包叫npm-check-updates,应该是集成了checkupgrade,但同样不会帮你升级,可搭配-u更新json文件
  • 标记过的包可以使用npm outdated查看(wanted)

讲到这里,应该比较清晰了,一般而言,升级有4种方案

  1. npm update,自带, 更新现有的node_modules里的包,5.0后版本会写json。但不能选择性升级
  2. npm-upgrade && npm i,选择性写package.json然后根据json安装,包括所有依赖,但npm-upgrade没有-g
  3. npm-check-updates -u && npm i,好像是有一套判断标准(我估计是不会引发冲突的程度),自动标记更新的部分,写文件,更新。有-g
  4. npm-check -u,列出可以更新的包,选择需要更新的包,自动调用npm i 安装模块及依赖并写json,有-g

说白了,npm updatenpm i是自带命令,i的功能强一些,可以实现update的操作,但在使用iupdate的时候需要配合package.json
npm-check, npm-upgrade这些,都是第三方的包,只是帮助你更好地管理其他的包或模块,比如更新json或自定义更新
npm-check是个不错的包

升级

方案一,使用自带命令一键更新,但不会进行大版本更新

1
npm update -g && npm update

方案二,使用npm-check自定义更新,可只选大版本更新,但出了什么问题自己担

1
2
npm i -g npm-check
npm-check -g -u && npm-check -u

最好用PowerShell,据说用git bash会有点问题

package.json的作用

根据我这几个小时的研究,这是文件其实是整个项目需要的所有模块的记录
记下来了,当你在一个新的文件夹初始化的时候,可以直接根据这个文件,一键安装所有需要的模块

即,我要重新安装Hexo
在没有这个文件的时候,我需要npm i hexo --save,这样我就有了hexo这个包所需的所有东西,并记录在案(但这个操作可能没啥用),然后再安装主题需要的模块,同样记录在案,etc
但如果我有这个文件,我只需要npm i,就可以得到所有东西。一键安装。我觉得我们很多人都走了弯路,其实根本不用麻烦,一个package.json就够

然后还要提到package-lock.json这个文件,这是锁版本用的,相当于封装这样子吧,避免版本不兼容出问题,一般,可能,大概,也许,用不到。

Win下npm的更新

用PowerShell执行,参见这里

1
Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Forcenpm install -g npm-windows-upgradenpm-windows-upgrade

重要参考文章

Command “npm update” vs package “npm-check-updates”