Получение ошибок при исправлении пакета 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
...

все работает нормально, когда я устанавливаю вещи локально, используя yarn или yarn install. Патч применяется, ошибок нет.

Однако, когда что-то переходит в CI, я получаю следующее сообщение об ошибке:

      **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)

3 ответа

Проблема здесь в том, что вы используете два разных инструмента для исправления пакета npm и используете другой локально, чем в CI:

  • patch-package в качестве сценария после установки (если вы отметите запись «postinstall» в своем package.json, вы увидите что-то вроде patch-package --patch-dir ./scripts/patches)
  • Встроенная функция исправления пакетов yarn, которая используется в package.json.

Однако работают они иначе:

Решение здесь - выбрать один и изменить патч для работы с этой системой. Так, например, если вы переименуете файл, чтобы удалить +version, вы сможете двигаться вперед, используя только пряжу patch:.

Делаю даунгрейд:

      "patch-package": "^5.0.0"

Я не знаю, ищет ли кто-нибудь еще эту проблему.

Моя проблема заключалась в разнице разрешенной версии в yarn.lock.

у меня было другое package.jsonверсии в моем случае, и я скопировал код, и это не сработало, потому что yarn.lock уже был сгенерирован. Я просто скопировал старый файл пряжи, и он работал отлично.

Например, мой yarn.lock выглядел так

Я изменил его, чтобы он соответствовал правильной версии

Другие вопросы по тегам