修补NPM包时出错 [英] Getting errors when patching a npm package

查看:0
本文介绍了修补NPM包时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我修补依赖项时,如下所示:

package.json

  "dependencies": 
    "react-native-webview": "patch:react-native-webview@11.0.3#scripts/patches/react-native-webview+11.0.3.patch",
    ...

patches/react-native-webview+11.0.3.patch

diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m
index ff9ff9e0..dfea91a8 100644
--- a/apple/RNCWebView.m
+++ b/apple/RNCWebView.m
@@ -194,12 +194,18 @@ - (void)dealloc
...
当我使用yarnyarn install在本地安装时,一切正常。修补程序已应用,并且没有错误。

但是,当进入配置项时,我收到如下错误:

**ERROR** Failed to apply patch for package react-native-webview at path
  
    node_modules/react-native-webview

  This error was caused because patch-package cannot apply the following patch file:

    patches/react-native-webview+11.0.3.patch

  Try removing node_modules and trying again. If that doesn't work, maybe there was
  an accidental change made to the patch file? Try recreating it by manually
  editing the appropriate files and running:
  
    patch-package react-native-webview
  
  If that doesn't work, then it's a bug in patch-package, so please submit a bug
  report. Thanks!

    https://github.com/ds300/patch-package/issues

如果我将补丁更改为使用a/node_modules/react-native-webview/apple/RNCWebView.m这样的路径,情况不会变得更好。然后我收到类似

的错误
➤ YN0001: │ Error: react-native-webview@patch:react-native-webview@npm%3A11.0.3#../../scripts/patches/react-native-webview+11.0.3.patch::version=11.0.3&hash=d13297&locator=proj-core%40workspace%3Alib%2Fproj-core: ENOENT: no such file or directory, lstat '/node_modules/react-native-webview/node_modules/react-native-webview/apple/RNCWebView.m'
    at rn (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:172:9625)
    at kn (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:172:9889)
    at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21594)
    at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21498)
    at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21498)
    at Qr.lstatSync (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:18712)
    at Qr.lstatPromise (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:18671)
    at yt.lstatPromise (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:34701)
    at Zu (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:578:7908)
    at YB (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:580:184)

推荐答案

这里的问题是,您使用了两个不同的工具来修补npm包,并且在本地使用了与CI中不同的工具:

  • patch-package作为安装后脚本(如果您检查Package.json中的";postinstall";条目,您将看到类似patch-package --patch-dir ./scripts/patches的内容)
  • 纱线内置的包打补丁的东西,它使用了Package.json中的patch:

但是,它们的工作方式不同:

修补程序包 纱线patch:
从项目根应用修补程序,因此您需要在比较中包含node_modules/package-name 应用程序包安装目录中的修补程序,因此您不需要执行此操作
要求将补丁命名为package-name+version.patch 不需要任何特定的命名
这里的解决方案是选择一个,然后更改修补程序以与该系统一起工作。因此,例如,如果您重命名该文件以删除+version,您将能够仅使用纱线的patch:继续前进。

这篇关于修补NPM包时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆