修改node_modules源码,使用patch-package打补丁
这篇文章主要介绍了Vue中引入使用patch-package为依赖打补丁问题
1. 安装依赖
npm install patch-package --save-dev
2. 修改脚本
# 在 package.json 文件中的 scripts 中增加
{
"scripts": {
"postinstall": "patch-package"
}
}
3. 修改源码
使用插件xlsx、xlsx-style导出带有样式的表格,两者都可以实现创建excel,但是xlsx免费版仅仅只能做单元格合并,收费版才能设置单元格样式,所以需要用到xlsx-style插件实现表格样式的修改
- 安装库
npm install --save xlsx-style //导出excel后表格的样式需要用到这个库
npm install --save xlsx //声明工作簿,创建文件,塞入数据要用到这个库
- 设置行高并修改源码
xlsx-style 库已经无人维护了,默认是没有行高配置的
如果需要设置行高的话
需要打开xlsx-style文件中的xlsx.js,找到write_ws_xml_data这个函数,替换成下面的代码
// 打开xlsx-style文件中的xlsx.js,找到write_ws_xml_data这个函数,替换成下面的代码
var DEF_PPI = 96, PPI = DEF_PPI;
function px2pt(px) { return px * 96 / PPI; }
function pt2px(pt) { return pt * PPI / 96; }
function write_ws_xml_data(ws, opts, idx, wb) {
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R, C,rows = ws['!rows'];
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
for(R = range.s.r; R <= range.e.r; ++R) {
r = [];
rr = encode_row(R);
for(C = range.s.c; C <= range.e.c; ++C) {
ref = cols[C] + rr;
if(ws[ref] === undefined) continue;
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
}
if(r.length > 0){
params = ({r:rr});
if(rows && rows[R]) {
row = rows[R];
if(row.hidden) params.hidden = 1;
height = -1;
if (row.hpx) height = px2pt(row.hpx);
else if (row.hpt) height = row.hpt;
if (height > -1) { params.ht = height; params.customHeight = 1; }
if (row.level) { params.outlineLevel = row.level; }
}
o[o.length] = (writextag('row', r.join(""), params));
}
}
if(rows) for(; R < rows.length; ++R) {
if(rows && rows[R]) {
params = ({r:R+1});
row = rows[R];
if(row.hidden) params.hidden = 1;
height = -1;
if (row.hpx) height = px2pt(row.hpx);
else if (row.hpt) height = row.hpt;
if (height > -1) { params.ht = height; params.customHeight = 1; }
if (row.level) { params.outlineLevel = row.level; }
o[o.length] = (writextag('row', "", params));
}
}
return o.join("");
}
//前面新增了三句代码也要复制过来,保存后要重启vue项目
4. 执行脚本,打补丁
因为 源码 被修改了,所以我们要把变化的地方打个补丁上去:
# 运行patch-package命令创建.patch文件
npx patch-package some-package
如果第一次使用会在根目录下生成 patches
文件夹,此文件夹为补丁目录
5. 测试补丁是否生效
删除node_modules目录,然后重新运行npm install,安装完成后,查看你修改的node_modules里面的代码是否还在。如果在,就说明补丁生效了。
6. 提交代码后重新 install
就ok了