论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
Vue修改node_modules中的第三方插件代码(后续npm insta ...
Vue修改node_modules中的第三方插件代码(后续npm install仍然保留该修改) ...
吴旭华
论坛元老
|
2024-9-6 23:17:49
|
显示全部楼层
|
阅读模式
楼主
主题
1743
|
帖子
1743
|
积分
5229
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
需求
:有时在开发过程中,如果node_modules 中我们使用的第三方插件有bug (作者又没有提供相应的API供我们扩展修改,提了issue也没人管)或者自己不满意我们的地方, 我们需要更改node_modules 依赖包中的源码时,为了不更改后,别人或者自己重新 npm install 时, 导致我们的更改丢失,我们需要用到patch-package。(魔改的同时,也局限了升级的本事,只管还是去提issue)
1.通过下令安装 patch-package
npm install patch-package
复制代码
2.修改项目根目次下的 package.json 文件
在 package.json 文件中的 scripts 中加入 "postinstall": "patch-package"
3.手动修改 node_modules 依赖包中的源码
例如:修改的是node_modules中vue-currency-input文件夹中的index.cjs文件源码
4.手动实行下令创建 npx patch-package package-name,package-name就是node_modules中的根文件夹名,你修改的依赖包的名字
例如:修改的是vue-currency-input文件夹中以内的文件
实行下令 npx patch-package vue-currency-input
5.实行完第4步的下令后,项目根目次中会自动创建一个 patches 文件夹,patches 文件夹里面就是新增的补丁文件。
留意:
a、每次修改不同的依赖包,每次都要实行npx patch-package package-name;
b、patch是锁定版本号的,如果升级了版本,patch内容将会失效,最幸亏package.json可以或许锁定版本号。
补丁文件中会像git一样显示补丁修改的具体点,如下图:
6、本地重新运行就可以生效了。
题目答疑:
1、补丁文件失效?
首先不管是npm,yarn或者pnpm下,都需要对要打补丁的依赖版本固定,如果后续团队中的其他成员依赖版本不划一,那么补丁不会生效的噢~
2、vite框架下都按照上述步骤来做了,但是为啥重启后没有生效?
首先vite为啥那么快的缘故原由之一是 node_modules下的.vite文件会把加载的依赖做一个缓存的(vite预构建),你修改补丁后,照常 yarn dev 或者 npm run dev 重启的话,这个.vite 缓存还是存在的,所以你会发现页面并没有什么变化,这个时间,你可以 yarn dev --force重启,意思就是不使用缓存,重新构建依赖,或者删除.vite文件,再重新启动。但是实际上 ,一个yarn dev --force足够了
3、打了补丁后,我不想要这个补丁了,怎么办?
这个时间如果你删除patches文件夹,再重启的话,实在是没有效果的,patches文件只会记载你修改了依赖的哪些东西,缘故原由是 npx patch-package 已经将依赖代码修改了,所以你想要规复的话,只有将之前的依赖源码还原回去,然后再 npx patch-package package-name(package-name为依赖名,可为路径名),这个时间重启,就会发现之前的源码又回来了
4、项目本地运行生效了,但线上摆设的时间该补丁文件未生效怎么办?
首先我们可以看下线上摆设构建时是否乐成安装patsh-package,它应该是报错了,并提示:cannot run in wd XXXXXXXXXXX patch-package
缘故原由分析:
npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户险些没有任何权限。这样的话如果脚本里有一些需要权限的操纵,比如写文件(实行install 的时间 patch-package 会往第三方库写代码)就会崩掉
办理办法如下:
第一种办法:实行npm install下令时加上
--unsafe-perm
选项:
npm install --unsafe-perm
复制代码
第二种办法:将
unsafe-perm
选项添加到项目标package.json文件中:
"config": {
"unsafe-perm":true
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
吴旭华
论坛元老
这个人很懒什么都没写!
楼主热帖
【云原生】第二篇--容器管理工具 Docke ...
数据库系统课程设计(高校成绩管理数据 ...
《原CSharp》第二回 巧习得元素分类 子 ...
使用TrueNas(FreeNas)进行华为手机备 ...
JVM虚拟机性能监控与故障处理工具(3) ...
java中==和equals区别
【图论】—— 有向图的强连通分量 ...
mamba-ssm安装building wheel卡着不动 ...
Spark 总复习
AWVS漏洞扫描器的使用
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
快速回复
返回顶部
返回列表