美文网首页
修改node_module中的包,却不受重新安装的影响

修改node_module中的包,却不受重新安装的影响

作者: 抽疯的稻草绳 | 来源:发表于2022-03-24 17:10 被阅读0次

背景

我们常常会遇到一个问题,网上现有的开源插件并不能满足我们实际项目的预期。但如果只需要对源码进行小小的改动就能满足我们的需求,那改源码一定是首选

前言

修改别人的源码往往有这几个方式:

  1. 直接在项目的node_modules下找到插件的源码直接修改;
  • 优点:简单直接、快速见效
  • 缺点:不能持久化,一旦重新安装就失效;不方便团队成员使用修改后的代码
  1. 去github上fork代码到自己的仓库进行修改,并将自己修改过后的代码发布到npm上使用;
  • 优点:团队成员都可以使用到这份修改的代码
  • 缺点:麻烦、十分麻烦

显而易见,上面这两种方法既不优雅,也不可靠。作为程序员的我们岂能被这事儿给难住,开源社区早已给我们准备好了解决方案:patch-package[1]

使用补丁

通过cra开启一个项目

npx create-react-app my-app
cd my-app
npm start

给项目@alifd/next(ui库)、patch-package、postinstall-postinstall(使用yarn安装时需要安装,npm无需安装此依赖)

yarn add @alifd/next patch-package postinstall-postinstall -D

给 package.json文件中添加脚本命令(非常重要,无论我们使用yarn还是npm,在整体安装结束后都会自动执行该命令,对node_modules中的包打补丁

"scripts": {
+  "postinstall": "patch-package"
 }

我们引入组件button,并查看组件当前结构

图片

我们去node_module中修改button源码

图片

我们在看看页面情况(如果没有效果的话,可以重启一下服务 )

图片

<figcaption mp-original-font-size="14" mp-original-line-height="22.399999618530273" style="margin: 5px 0px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; text-align: center; color: rgb(221, 165, 45); font-size: 14px; line-height: 22.399999618530273px;">result.png</figcaption>

修改完并且也生效了,我们就要开始打补丁了,运行命令yarn patch-package package-name

yarn patch-package @alifd/next

成功后你会看到根目录多了一个patches文件夹,里面包含了你修改的npm包的patch文件。点开可以很清楚的看到你都做了哪些修改。文件名中的1.22.21就是依赖包的版本号,表示这个补丁只对1.22.21版本的插件生效

图片

测试

删除node_module并重新安装

rm -rf node_modules/ && yarn

依赖包安装完成后可以在命令行中看到补丁被应用(倒数后5行)

[1/4]   Resolving packages...
[2/4]   Fetching packages...
[3/4]   Linking dependencies...
warning " > @testing-library/user-event@12.8.3" has unmet peer dependency "@testing-library/dom@>=7.21.4".
warning "react-scripts > @typescript-eslint/eslint-plugin > tsutils@3.21.0" has unmet peer dependency "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta".
warning " > @alifd/next@1.22.21" has unmet peer dependency "@alifd/meet-react@^2.0.0".
warning " > @alifd/next@1.22.21" has unmet peer dependency "moment@^2.22.1".
warning " > @alifd/next@1.22.21" has incorrect peer dependency "react@^16.0.0".
warning " > @alifd/next@1.22.21" has incorrect peer dependency "react-dom@^16.0.0".
[4/4]   Building fresh packages...
$ patch-package
patch-package 6.4.7
Applying patches...
@alifd/next@1.22.21 ✔
✨  Done in 20.10s.

yarn start重新启动,查看审查元素,依旧是a标签!

相关文章

  • 修改node_module中的包,却不受重新安装的影响

    背景 我们常常会遇到一个问题,网上现有的开源插件并不能满足我们实际项目的预期。但如果只需要对源码进行小小的改动就能...

  • 热更新报错 Errors while compiling. Re

    修改node_module里的node_modules\webpack-dev-server\client\ind...

  • node基础

    http & url 包管理 npm init 安装包 1、使用 npm install node_module ...

  • GCD定时器

    目前这个定时器实现了APP中全局倒计时的功能,切换页面和前后台,包括修改系统时间都不受影响。 1.修改系统时间导致...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • cocoapods异常记录

    重新安装了系统后使用cocoapods输出: 但并不影响使用,看着别扭,只需要修改下文件夹的读写权限就行

  • 不受恐惧的影响

    人类天生就有情感,情感是行动的燃料,少了情感呢,我们就无法做决定,就会软弱,没有方向,我们需要这样的燃料给自己的行...

  • java断言——2018-12-08

    1 断言主要用于本地调试,生产环境不受影响。(junit包中) 2 断言默认是关闭状态,开启断言配置如下:jdk配...

  • iOS软件包ipa重签名详解

    ipa是iOS系统app安装包,如果我们想对App Store上的软件进行修改然后重新安装到手机上、或者对已有的A...

  • 修改jar包中的class

    修改maven中jar包一般压缩软件可以查看jar包内容,但是我从来没试过把解压后的class再重新打成jar,据...

网友评论

      本文标题:修改node_module中的包,却不受重新安装的影响

      本文链接:https://www.haomeiwen.com/subject/kucljrtx.html