"Module not found" 自动生成文件的流程错误
"Module not found" Flow error for autogenerated file
我有三个 ES2015 模块:store.js
、middleware-config.js
和带有一些逻辑和导入的自动生成的 middleware-config-settings.js
。
当应用程序以 npm start
开始时,模块 middleware-config-settings.js
是从 webpack.config.js
生成的。
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
执行得很好。而且这种方法也不太好(我所有的模块都应该 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.
几个选项:
- 避免自动生成文件(我假设您已经考虑过并决定反对)。
- 创建一个包含原型配置的永久性
middleware-config-settings.js.flow
,并将其签入版本控制。然后,Flow 将查看该文件而不是查找 .js
文件,它会进行类型检查,但实际值将在每个 运行 上生成。这种方法的主要缺点是确保 .js.flow
文件的结构在您进行更改时与生成的 .js
文件的结构相匹配。
- 引入生成所需文件的显式构建步骤,而不是在
npm start
脚本中隐式包含该步骤。然后,只需确保 运行 在使用 Flow 之前构建步骤。
关于你的第二个问题,我相信如果你在 [ignore] 部分添加一些东西,Flow 只会假装它根本不存在。因此,如果您从已检查的文件中导入被忽略的文件,Flow 会报错。
我通过使用 require
导入 middleware-config-settings.js
并将模块名称存储在变量中(避免 Required module not found
错误)和添加 @FlowFixMe
来解决这个问题(为了避免 The parameter passed to require() must be a literal string.
错误):
let moduleName = './middleware-config-settings';
// @FlowFixMe: import autogenerated file.
let defaultSettings = (require(moduleName): any);
我有三个 ES2015 模块:store.js
、middleware-config.js
和带有一些逻辑和导入的自动生成的 middleware-config-settings.js
。
当应用程序以 npm start
开始时,模块 middleware-config-settings.js
是从 webpack.config.js
生成的。
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
执行得很好。而且这种方法也不太好(我所有的模块都应该 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.
几个选项:
- 避免自动生成文件(我假设您已经考虑过并决定反对)。
- 创建一个包含原型配置的永久性
middleware-config-settings.js.flow
,并将其签入版本控制。然后,Flow 将查看该文件而不是查找.js
文件,它会进行类型检查,但实际值将在每个 运行 上生成。这种方法的主要缺点是确保.js.flow
文件的结构在您进行更改时与生成的.js
文件的结构相匹配。 - 引入生成所需文件的显式构建步骤,而不是在
npm start
脚本中隐式包含该步骤。然后,只需确保 运行 在使用 Flow 之前构建步骤。
关于你的第二个问题,我相信如果你在 [ignore] 部分添加一些东西,Flow 只会假装它根本不存在。因此,如果您从已检查的文件中导入被忽略的文件,Flow 会报错。
我通过使用 require
导入 middleware-config-settings.js
并将模块名称存储在变量中(避免 Required module not found
错误)和添加 @FlowFixMe
来解决这个问题(为了避免 The parameter passed to require() must be a literal string.
错误):
let moduleName = './middleware-config-settings';
// @FlowFixMe: import autogenerated file.
let defaultSettings = (require(moduleName): any);