React Native: подфайлы, вызывающие сговоры имен

Я получаю сообщение об ошибке:

Неоднозначное решение: модуль "... / myModule.js" пытается требовать 'response-native', но есть несколько файлов, предоставляющих этот модуль. Вы можете удалить или исправить их:

... / MyProject / ios / Pods / React / package.json

... / MyProject / node_modules / react-native / package.json

Я почти уверен, что это связано с использованием подфайлов, в частности, когда они устанавливают папку «React». Однако мне пришлось использовать подфайлы, чтобы установить react-native-firebase. С учетом сказанного, когда я удаляю папку React в папке Pods (ios / Pods / React), я больше не могу использовать react-native-firebase.

Вокруг GitHub было исправление, которое предлагало добавить Podfile с помощью:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

Но у меня это не сработало. Кто-нибудь раньше сталкивался с этой проблемой?

Если это актуально, я использую этот подфайл:

platform :ios, '8.0'

target 'MyProject2' do
    pod 'Firebase/Core'
    pod 'Firebase/Database'
    pod 'Firebase/Messaging'

  pod 'RNSVG', :path => '../node_modules/react-native-svg'

  target 'MyProject2Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      if target.name == "React"
        target.remove_from_project
      end
    end
  end

end

РЕДАКТИРОВАТЬ: Когда я удаляю «RNSVG» из своего подфайла, я получаю сообщение об ошибке: «Неизменяемое нарушение: собственный компонент для« RNSVGPath »не существует». Я запустил ссылку на response-native и выполнил инструкции по ручной установке для react-native-svg.


person user8951490    schedule 21.03.2018    source источник


Ответы (4)


Мне пришлось вручную связать модуль React с node_modules:

pod 'React', :path => '../node_modules/react-native'

person Chris Feist    schedule 12.09.2018
comment
Великолепно, но я обнаружил, что мне также нужно добавить раздел подспецификации! - person deworde; 12.10.2018

Я только что справился с этой проблемой, когда заставил свое приложение работать на iOS.

Я использовал решение Криса, а также ...

Диспетчер поспешной упаковки находил экземпляры моих модулей как в корневой папке node_modules, так и в папке node_modules внутри моей папки сборки.

Чтобы решить эту проблему, создайте файл с именем rn-cli.config.js в корне вашего проекта:

const blacklist = require('metro-config/src/defaults/blacklist');


module.exports = {
resolver: {
blacklistRE: blacklist([
                        /Build\/.*/,
                        ])
},
};
person T_R_U_T_H    schedule 17.01.2019

Эта проблема, похоже, возникает каждый раз, когда Pod добавляется с зависимостью React.

Если что-то имеет зависимость от реакции и React Pod не добавлен, он часто пытается установить его, находя старую версию React на CocoaPods (0.11).

Чтобы этого избежать, вам необходимо явно добавить зависимость и требуемые подзависимости в соответствии с документацией для response-native здесь: react-native cocoapods docs.

Например, когда я добавил модуль react-native-community/async-storage, мне пришлось добавить все это в свой подфайл, который раньше имел только зависимости, связанные с AppCenter и Firebase:

  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # Include this for RN >= 0.47
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # Needed for debugging
    'RCTAnimation', # Needed for FlatList and animations running on native UI thread
# Add any other subspecs you want to use in your project
  ]
  # Explicitly include Yoga if you are using RN >= 0.42.0
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
  pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-community/async-storage'
person nicholascm    schedule 09.08.2019

Взглянув на react-native-svg, их подфайл указывает React как зависимость. Для простоты я бы посоветовал вам использовать рекомендуемую команду react-native link для установки этой библиотеки, а не указывать ее в подфиле.

После удаления react-native-svg вы, вероятно, захотите очистить папку Podfile и повторно запустить pod install

person Chris    schedule 22.03.2018
comment
Когда я это делаю, я получаю инвариантное нарушение: собственный компонент для «RNSVGPath» не существует. Несмотря на это, я выполнил команду «react-native link» и выполнил шаги по ручной установке react-native-svg. - person user8951490; 22.03.2018
comment
По моим наблюдениям, ссылка на react-native добавляет библиотеку в Podfile, так что это должно дать тот же эффект. - person deworde; 10.10.2018