node_modules依赖包源码修改同步相关 - childlabor/blog GitHub Wiki

element-china-area-data 的数据修改为例

1.依赖包修改

china-area-data

修改数据

数据源: node_modules\china-area-data\scripts\format.js

找到 const special = {...} 内的数据 手动修改

在当前目录下

$ npm run build 

构建最新数据

element-china-area-data

构建组件

$ cd ../element-china-area-data

$ npm run build

如果提示: Do you want to install 'webpack-cli' (yes/no)

表示需要预先安装webpackwebpack-cli

建议直接全局安装

如果全局安装完构建依旧出现上述错误提示,则建议在项目根目录下(非依赖包内)局部安装。

如果你 webpackwebpack-cli 是局部安装在 element-china-area-data 依赖包下的,想要使用webpack命令必须进入node_modules/.bin/webpack才能执行webpack命令

安装完成后再次执行即可

$ npm run build 

修改完成后,运行项目,进入相关页面验证本地修改是否生效。

2.协同同步

安装

$ npm i patch-package --save-dev

项目根目录下

$ npx patch-package [package-name]

[package-name] 为 改动的 node_modules 包的名字

本例:

$ npx patch-package china-area-data element-china-area-data

此时会提示依赖包补丁已更新

在 package.json 文件增加


“scripts”: { 
    "postinstall": "patch-package"
}

每次npm install后会自动触发patch-package 补丁检查

也可以直接运行

$ npm run postinstall

运行完以上,会在根目录下生成补丁文件夹 patches。可以查看所有修改文件。

patches 提交到仓库之后,其他协作者只要运行 npm i ,就能自动同步依赖包的修改。

3.问题

存在一个未解决问题

初次协同可以成功,如果多次修改依赖包,同步代码后运行 npm i ,会出现错误提示:

...
This error was caused because patch-package cannot apply the following patch file:
...

初步分析可能是由于操作系统跨平台导致。

Linux或Mac系统使用LF作为行结束符,Windows系统上则使用的是CRLF。

也就是说Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符来结束一行。

但是根据官方提供解决方案:

windows下:

$ git config --global core.autocrlf true

提交时,将CRLF 转成 LF再提交;

检出时,自动将LF 转为 CRLF;

实际操作并未成功,而且测试了 core.autocrlf 三种设置 true, false, input均无效。。。

临时处理方法

如果出现上述错误,只需要将 node_modules 文件夹删除,并重新 npm i 即可。

完善的处理方法,待补充。。。

参考

patch-package 修改 node_modules 源代码并引用

Inconsistent information provided when patching fails