优雅改写 Node Modules

优雅改写 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
npm i patch-package --save-dev
  • 修改 Node Modules

修改 Hexo 模块,这里就不贴我的代码了,没有什么参考意义。

  • 运行 Patch Package 命令

修改完成后,运行如下命令生成 patch 文件:

npx patch-package your-package-name

运行结束后,就会看到项目的根目录里头生成了 patches 文件夹,里头有这样一个文件

your-package-name+version.patch

  • 运行 Package.json 文件
    修改 package.json 的 Script,使其运行 npm install 的时候自动部署差异到模块库
1
2
3
4
5
6
7
8
9
{
...
"scripts": {
...
"postinstall": "patch-package"
...
}
...
}
  • 重新安装模块
    修改完成后,如果直接运行 npm install 或者 npm install –force,都会出现错误,Patch Package 会提示你删除掉 node_modules 文件夹以后重试,我们按照他说的要求删除以后,重新运行 npm install –no-save,就会出现成功提示。

然后重新运行 hexo server 命令,重新查看博客,就会看到修改已经生效了

评论