我有三个 ES2015 模块:store.js
、middleware-config.js
和自动生成的 middleware-config-settings.js
以及一些逻辑和导入。
当应用程序通过 npm start
启动时,模块 middleware-config-settings.js
是从 webpack.config.js
生成的。 p>
store.js
:
// @flow
...
import middlewareConfigs from './middleware/middleware-config';
...
middleware-config.js
:
// @flow
...
import defaultSettings from './middleware-config-settings';
...
模块 middleware-config-settings.js
只是简单的 JSON:
// @flow
export default {
profilingMiddlewareConfig: {
isActive: true,
},
reduxDiffStateMiddlewareConfig: {
isActive: true,
params: {
ignoredActionTypes: [],
approvedActionTypes: []
}
}
};
当我使用 flow
检查项目时,出现错误:
./middleware-config-settings. Required module not found
首先,我尝试忽略该行的流程检查:
// @flow
...
// @FlowFixMe: ignore
import defaultSettings from './middleware-config-settings';
...
如果 middleware-config-settings.js
不存在,该方法可以正常工作。否则,我遇到了另一个问题:创建 npm start
middleware-config-settings.js
文件后,下一个 flow
执行失败并出现另一个错误:
Error suppressing comment. Unused suppression
第二,我尝试将 middleware-config.js
添加到 .flowconfig
的 [ignore]
部分。但后来我从 store.js
收到了新的错误消息:
./middleware/middleware-config. Required module not found
之后,我也将 store.js
添加到 [ignore]
部分,并且 flow
执行良好,但我认为这不是正确的方法。
第三种方法与第二种类似 - 我刚刚从 middleware-config.js
和 flow< 中删除了
//@flow
/code> 执行得很好。而且这种方法也不太好(我的所有模块都应该是flow
ed)。
所以我有两个问题:
- 如何在不从
flow
检查中排除任何文件的情况下获得无错误的flow
执行? - 为什么当我将
middleware-config.js
添加到[ignore]
部分时,出现关于store.js
的错误?如果我的理解是documentation是正确的,所以这不是正确的行为:The [ignore] heading in a .flowconfig file tells flow to ignore files matching the specified regular expressions when type checking your code.
最佳答案
几个选项:
- 避免自动生成文件(我假设您已经考虑过这一点并决定不这样做)。
- 创建一个包含原型(prototype)配置的永久
middleware-config-settings.js.flow
,并将其 checkin 版本控制。然后,Flow 将查看该文件而不是查找.js
文件,并进行类型检查,但每次运行时都会生成实际值。这种方法的主要缺点是,在进行更改时要确保.js.flow
文件的结构与生成的.js
文件的结构相匹配。< - 引入一个生成所需文件的显式构建步骤,而不是将该步骤隐式包含在
npm start
脚本中。然后,只需确保在使用 Flow 之前运行该构建步骤即可。
关于你的第二个问题,我相信如果你在 [ignore] 部分添加一些内容,Flow 就会假装它根本不存在。因此,如果您从已检查的文件中导入被忽略的文件,Flow 会给您一个错误。
关于javascript - "Module not found"自动生成的文件的流程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592334/