问题 流为源说“找不到所需模块”


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

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

哪个React Native处理得很好而且有效。然而,Flow似乎正试图对待 require() 作为常规模块需要而不是找到它,并给出如下错误:

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

如何告诉Flow停止提供这些错误?我试过添加 .*/images/.* 到了 [ignore] 我的部分 .flowconfig,但这不会改变任何事情。


7209
2018-04-19 19:41


起源

我很好奇, 还在最新 流无法为我的新项目运行。您是否添加了超出开箱即用的自定义忽略/包含规则?如果这真的是你唯一的问题,请把它作为一个要点分享吗? - Adam Terlson
我认为我们主要使用“react-native init”开箱即用的设置,是的。 - Ben Hoyt
这有效......?奇。我从node_modules得到各种错误。你愿意在一个要点中分享你的.flowconfig吗? - Adam Terlson
对不起,我实际上还原/删除了我正在使用的版本。无论如何,在这一点上,我们决定不在我们的React Native项目中使用Flow。 - Ben Hoyt
@AdamTerlson - 我必须在.flowconfig中将。* / node_modules / *添加到[ignore]以从中获取任何合理的内容。 - ostergaard


答案:


你可以使用 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;

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

另见 高级配置 文档。


10
2018-04-20 17:16



请注意,我需要崩溃 = 'png' 至 ='png'。 - MoOx


我没有一个真正的答案,除了说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
2018-04-19 21:30





有同样的问题,对于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
2018-04-10 06:52



对我来说它不起作用......我对流动感到非常沮丧。 - pietro909