如何给我们项目中的node_modules里面的包打补丁

背景

我们项目所依赖的一个包因为版本问题,可能在低版本的情况下,会出现报错。我们希望能patch这个错误。

// @shopee-rn/nebula
import { reportUIError } from '@shopee/react-native-sdk';

useEffect(
  () => {
    if (!__DEV__) {
      reportUIError(); // @shopee/react-native-sdk版本太低的话,reportUIError方法是不存在的
    }
  },
  // Only report to APMS once when empty state rendered
  // eslint-disable-next-line react-hooks/exhaustive-deps
  []
);

希望修改为:

// @shopee-rn/nebula
import { reportUIError } from '@shopee/react-native-sdk';

useEffect(
  () => {
    if (!__DEV__) {
      typeof reportUIError === 'function' && reportUIError(); // here
    }
  },
  // Only report to APMS once when empty state rendered
  // eslint-disable-next-line react-hooks/exhaustive-deps
  []
);

解决

  • 根目录下运行 yarn patch @shopee-rn/nebula
  • 点击紫色文字,会打开另一个vscode
  • 修改我们需要改动的node_modules的代码
  • 回到原先的vscode,执行yarn patch-commit命令,会自动生成一个.patch文件和在package.json中的resolutions也添加相应代码。需注意:需要dependencies里面有这个@shopee-rn/nebula包的存在,否则不生效,因为打补丁需要针对唯一的版本来看。

在这里插入图片描述
如何给我们项目中的node_modules里面的包打补丁_第1张图片


  "resolutions": {
    "@shopee-rn/[email protected]": "patch:@shopee-rn/nebula@npm:3.6.4#.yarn/patches/@shopee-rn-nebula-npm-3.6.4-3e296f3bf8.patch"
  },

你可能感兴趣的:(前端)