流为<Image>源说"找不到所需模块"

Ben*_*oyt 11 flowtype react-native

我们有一个现有的React Native项目(版本0.22.2),我正在尝试在某些文件上设置Flow类型检查器(版本0.23).但是,Flow为require()我们用于<Image>源的s调用提供了很多错误.例如,我们在Header.js中的一个组件中有这个代码:

<Image source={require('./images/nav.png')} style={styles.navIcon} />
Run Code Online (Sandbox Code Playgroud)

哪个React Native处理得很好而且有效.但是,Flow似乎试图将其require()视为常规模块需要而不是找到它,并给出如下错误:

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

如何告诉Flow停止提供这些错误?我已经尝试添加.*/images/.*[ignore]我的部分.flowconfig,但这并没有改变任何东西.

小智 10

您可以使用module.name_mapper.extension.flowconfig中的选项.例如,

[options]
module.name_mapper.extension= 'png' -> '<PROJECT_ROOT>/ImageSourceStub.js.flow'
Run Code Online (Sandbox Code Playgroud)

它会将结束的任何模块名称映射.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;
Run Code Online (Sandbox Code Playgroud)

所以Flow知道require('*.png')返回一个{uri: string}.

另请参阅高级配置文档.

  • 请注意,我需要将`='png'`折叠为`='png'`. (2认同)