当我修补这样的依赖项时:
\npackage.json:
"dependencies": \n "react-native-webview": "patch:react-native-webview@11.0.3#scripts/patches/react-native-webview+11.0.3.patch",\n ...\nRun Code Online (Sandbox Code Playgroud)\npatches/react-native-webview+11.0.3.patch:
diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m\nindex ff9ff9e0..dfea91a8 100644\n--- a/apple/RNCWebView.m\n+++ b/apple/RNCWebView.m\n@@ -194,12 +194,18 @@ - (void)dealloc\n...\nRun Code Online (Sandbox Code Playgroud)\nyarn当我使用或在本地安装东西时,一切正常yarn install。补丁已应用,并且没有错误。
然而,当事情进入 CI 时,我收到如下错误:
\n**ERROR** Failed to apply patch for package react-native-webview at path\n \n node_modules/react-native-webview\n\n This error was caused because patch-package cannot apply the following patch file:\n\n patches/react-native-webview+11.0.3.patch\n\n Try removing node_modules and trying again. If that doesn\'t work, maybe there was\n an accidental change made to the patch file? Try recreating it by manually\n editing the appropriate files and running:\n \n patch-package react-native-webview\n \n If that doesn\'t work, then it\'s a bug in patch-package, so please submit a bug\n report. Thanks!\n\n https://github.com/ds300/patch-package/issues\nRun Code Online (Sandbox Code Playgroud)\n如果我将补丁更改为使用诸如a/node_modules/react-native-webview/apple/RNCWebView.m. 然后我收到类似的错误
\xe2\x9e\xa4 YN0001: \xe2\x94\x82 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\'\n at rn (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:172:9625)\n at kn (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:172:9889)\n at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21594)\n at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21498)\n at Qr.resolveFilename (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:21498)\n at Qr.lstatSync (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:18712)\n at Qr.lstatPromise (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:18671)\n at yt.lstatPromise (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:177:34701)\n at Zu (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:578:7908)\n at YB (/home/user/dev/proj-client/.yarn/releases/yarn-3.0.0.cjs:580:184)\nRun Code Online (Sandbox Code Playgroud)\n
这里的问题是,您使用两种不同的工具来修补 npm 包,并且在本地使用与 CI 中不同的工具:
patch-package --patch-dir ./scripts/patches)patch:在 package.json 中使用。然而,它们的工作方式不同:
| 补丁包 | 纱线的patch: |
|---|---|
从项目根应用补丁,因此您需要包含node_modules/package-name在差异中。 |
应用软件包安装目录中的补丁,因此您不需要这样做 |
要求补丁被命名package-name+version.patch |
不需要任何特定的命名 |
这里的解决方案是选择一个,并更改补丁以适用于该系统。因此,例如,如果您重命名文件以删除+version,您将能够仅使用纱线的patch:.