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)
表示需要预先安装webpack
和 webpack-cli
建议直接全局安装
如果全局安装完构建依旧出现上述错误提示,则建议在项目根目录下(非依赖包内)局部安装。
如果你 webpack
和 webpack-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
即可。
完善的处理方法,待补充。。。