优雅改写 Node Modules
对于一直在使用 Hexo 框架构建博客的同学来说肯定有这方面那方面定制化 Hexo 框架的需求,那么这就涉及到需要修改 Hexo 的模块文件,也就是 Node Modules,常规的修改手段可能是拷贝一份到自己的项目,然后手动修改 package.json 里头的引用依赖,这种方式短时间看好像没什么问题,部署到生产环境也可以运行,但是长时间来看,暴漏的问题就很多了,你可能只修改了一个文件,甚至几行,但是却要付出很大的版本代价。
版本代价源于你无法跟随包的版本更新而自动更新,需要手动得再来一次相同的操作,有同学可能会说了,我自己写一个脚本完成这个流水线工作,没有错,思路非常正确,这也就是今天要介绍的强大模块 - Patch Modules。
这个模块也是完成了这样一个自动化的流水线工作,不过它的工作方式不是全量的,而是基于 diff 差异化更新。
- Patch-Package 工作模式
* 1.安装此模块
* 2.修改需要定制化的模块
* 3.运行 Patch-Package 的命令,生成 patch 差异文件
* 4.修改 package.json 的 Script,使其运行 npm install 的时候自动部署差异到模块库
实践
我的需求来自需要修改 Hexo 博客框架的类别标签排列,因为我的博客类别列表是这样的:
但是我觉得不太好看,因为我的项目列表有三个子项(公司项目,外包项目,个人项目),这种有子类别的放到中间就不太好看,我希望把这种有子类别的放到后面去,查看源码,发现了生成博客类别列表的 node modules 模块,然后就可以用 Patch Modules 操作一下了。
- 安装 Patch Package
- 修改 Node Modules
修改 Hexo 模块,这里就不贴我的代码了,没有什么参考意义。
- 运行 Patch Package 命令
修改完成后,运行如下命令生成 patch
文件:
运行结束后,就会看到项目的根目录里头生成了 patches 文件夹,里头有这样一个文件
your-package-name+version.
patch
- 运行 Package.json 文件
修改 package.json 的 Script,使其运行 npm install 的时候自动部署差异到模块库
1 | { |
- 重新安装模块
修改完成后,如果直接运行 npm install 或者 npm install –force,都会出现错误,Patch Package 会提示你删除掉 node_modules 文件夹以后重试,我们按照他说的要求删除以后,重新运行 npm install –no-save,就会出现成功提示。
然后重新运行 hexo server 命令,重新查看博客,就会看到修改已经生效了