使用pnpm给第三方包打补丁

彻底快速删除node_modules文件,避免缓存

在windows下安装了一个包,但是在删除node_modules文件夹时提示该文件夹包含名称过长删除不了或者删除过慢,还带有缓存。怎么才能彻底删除这个文件夹?
方法一:
1.安装npm包–rimraf
npm install rimraf -g // 全局安装
2.在cmd指令下,进入所需删除的node_modules文件夹的位置,再输入指令
rimraf node_modules // 删除
方法二:
另外在命令控制台下可以用 rmdir /s/q your_app_dir 来删除

以修改 vue-echarts包为例

1、在node_modules中查看该包实际安装的版本,假设为6.1.0版本
2、在package.json中锁定该版本

"vue-echarts": "6.1.0",

3、先删除项目中的node_modules包
安装或升级pnpm不小于7.4.0版本

npm install -g pnpm

4、运行 pnpm patch <pkg name>@<version>

 pnpm patch vue-echarts@6.1.0

该命令将导致一个包被提取到一个可以随意编辑的临时目录中。
5、在该临时目录中修改三方的包
完成更改后,运行pnpm patch-commit <path>(path为临时目录地址)以生成补丁文件并通过该字段<path>将其注册到您的顶级清单中
运行后会在顶级目录
①、package.json中出现

  "pnpm": {
    "patchedDependencies": {
      "vue-echarts@6.1.0": "patches/vue-echarts@6.1.0.patch"
    }
  }

②、多了一个patches目录


image.png

6、重新安装依赖pnpm i
会发现node_modules中对应的vue-echarts包相应的内容已经被更改

使用vue-echarts遇到的一个坑

vue-echarts 6.1.0版本使用图表配置autoresize=true时,在监控软件上会报ResizeObserver loop limit exceeded,查看源码发现是因为useAutoresize中throttle使用了防抖,造成图表的resize过于频繁的进行了更改。

    function useAutoresize(chart, autoresize, root) {
        var resizeListener = null;
        vueDemi.watch([root, chart, autoresize], function (_a, _, cleanup) {
            var root = _a[0], chart = _a[1], autoresize = _a[2];
            if (root && chart && autoresize) {
                resizeListener = core.throttle(function () {
                    chart.resize();
                }, 100);
                addListener(root, resizeListener);
            }
            cleanup(function () {
                if (resizeListener && root) {
                    removeListener(root, resizeListener);
                }
            });
        });
    }

修改为

    function useAutoresize(chart, autoresize, root) {
        var resizeListener = null;
        vueDemi.watch([root, chart, autoresize], function (_a, _, cleanup) {
            var root = _a[0], chart = _a[1], autoresize = _a[2];
            if (root && chart && autoresize) {
                resizeListener = core.throttle(function () {
                    chart.resize();
               }, 300,true);//1、加入true 让throttle用节流控制的方式运行,2、增加时间间隔变为300ms
                addListener(root, resizeListener);
            }
            cleanup(function () {
                if (resizeListener && root) {
                    removeListener(root, resizeListener);
                }
            });
        });
    }
参考

pnpm:https://pnpm.io/cli/patch

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容