2016-04-19 2 views
10

У нас есть существующий проект React Native (версия 0.22.2), и я пытаюсь настроить средство проверки потока (версия 0.23) на определенные файлы. Тем не менее, поток дает много ошибок для звонков require(), которые мы используем для <Image> источников. Например, у нас есть этот код в одном из наших компонентов в Header.js:Поток «Требуемый модуль не найден» для <Image> источников

<Image source={require('./images/nav.png')} style={styles.navIcon} /> 

, которые при реагировании Родные ручки хорошо, и это работает. Тем не менее, поток, кажется, пытается лечить require(), как требуется регулярный модуль и не найдя его, и дает ошибки, как это:

Header.js:30 
30: <Image source={require('./images/nav.png')} style={styles.navIcon} /> 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./images/nav.png. Required module not found 

Как я могу сказать, поток прекратить давать эти ошибки? Я пробовал добавить .*/images/.* в раздел [ignore] моего .flowconfig, но это ничего не меняет.

+0

Мне любопытно, [Еще на последней] (https://github.com/facebook/react-native/issues/784 # issuecomment-94208658) поток не запускается для нового проекта для меня. Вы добавили пользовательские правила игнорирования/включения за пределы того, что предоставляется из коробки? Разум делится им как суть, если это действительно единственная проблема, которая у вас есть? –

+0

Я думаю, что мы используем в основном исходные настройки из «init-native init», да. –

+0

И что работает ...? Странный. Я получаю всевозможные ошибки от node_modules. Не могли бы вы поделиться своим .flowconfig в сущности? –

ответ

9

Вы можете использовать опцию module.name_mapper.extension в .flowconfig. Например,

[options] 
module.name_mapper.extension= 'png' -> '<PROJECT_ROOT>/ImageSourceStub.js.flow' 

, который будет отображать любое имя модуля, оканчивающиеся на .png к ImageSourceStub модуля, как если бы вместо того, чтобы писать require('./foo.png') вы написали require('./path/to/root/ImageSourceStub').

В ImageSourceStub.js.flow вы можете сделать

const stub = { 
    uri: 'stub.png' 
}; 
export default stub; // or module.exports = stub; 

так, что поток знает, что require('*.png') возвращает {uri: string}.

См. Также документы Advanced Configuration.

+1

Обратите внимание, что мне нужно было свернуть '= 'png'' до' =' png''. – MoOx

0

У меня нет реального ответа, кроме того, чтобы сказать, что поток в React Native кажется действительно изворотливым сегодня, и это не удивит меня, если поток просто не поддерживает это использование вообще, но я бы хотел полностью удивлен!

Лично я работаю над тем, чтобы добавить компонент более высокого уровня и игнорировать ошибки потока в этом файле.

// Picture.js 
// (No @flow tag at top of file) 
const Picture = ({ source }) => (
    <Image source={require(source)} /> 
) 

Затем используйте вместо этого <Picture source="my/path/pic.jpg" />.

0

Если бы тот же вопрос, для JPG-файлов, решить эту .flowconfig

module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' 
module.name_mapper='^[./a-zA-Z0-9$_-]+\.png$' -> 'RelativeImageStub' 
module.name_mapper='^[./a-zA-Z0-9$_-]+\.jpg$' -> 'RelativeImageStub' 
+0

для меня это не работает ... Я очень расстраиваюсь потоком. – pietro909

Смежные вопросы