导入Flow类型模块报错:Cannot find module "./src/module.js"求助
解决Flow模块导入时"Cannot find module"的问题
嘿,我碰到过好几次这种Flow模块导入的坑,给你梳理几个最可能的原因和对应的解决办法,应该能帮你搞定:
1. 先核对文件路径是否搞反了层级
错误提示里说找不到./src/module.js,你先仔细检查下:
- 你的
form.js所在目录下,真的有src子目录吗?而且module.js确实在这个src目录里? - 如果
module.js和form.js在同一个文件夹里,那导入路径应该是./module.js,而不是带src的;如果module.js在上一级目录的src里,路径就得写成../src/module.js,别把相对路径的层级搞混了。
2. 检查Flow的配置文件.flowconfig
Flow得正确识别你的模块所在目录,不然会找不到:
- 打开
.flowconfig,看看[include]字段里有没有添加module.js所在的目录?比如如果它在src下,就得确保include里有./src这一行; - 如果你的项目用了模块别名(比如直接
import 'module'),那得在.flowconfig的[module.name_mapper]里加映射规则,比如:[module.name_mapper] ^module$ = ./src/module.js
3. 确认文件扩展名和导入写法
- Flow默认认
.js、.jsx、.flow.js这些扩展名,你看看module.js的后缀是不是正确的?别写成.flow或者其他Flow不识别的格式; - 有些打包工具允许省略扩展名,但Flow有时候需要明确写全,试试把导入语句改成
import { capitalizeFirstLetter, titleize } from './src/module.js';(带上完整的.js后缀)。
4. 别忘了给模块添加导出!
看你贴的module.js代码,只写了函数定义,但没导出啊!这样哪怕路径对了,也没法导入使用。你得把函数导出:
// module.js function capitalizeFirstLetter(data: string) { return data.charAt(0).toUpperCase() + data.slice(1); } function titleize(data: string) { if (data === null || data === undefined) { return ""; } // 你的剩余代码... } // 方式1:命名导出,适合多个函数 export { capitalizeFirstLetter, titleize }; // 方式2:默认导出,适合把所有函数打包成一个对象导出 // export default { capitalizeFirstLetter, titleize };
如果用默认导出,导入的时候也要对应调整:
import utils from './src/module.js'; // 使用的时候就是 utils.capitalizeFirstLetter('test')
5. 清掉Flow缓存试试
有时候Flow的缓存会抽风,导致明明路径对了却找不到模块。你可以先运行flow stop停掉Flow服务,然后删掉项目根目录的.flowcache文件夹,再重新启动Flow(flow start),之后再测试导入是否正常。
内容的提问来源于stack exchange,提问作者Jackson Tiu
相关产品推荐
相关产品推荐

