“找不到模块”自动生成的文件的流量错误

时间:2017-01-11 13:33:02

标签: javascript ecmascript-6 flowtype es6-modules

我有三个ES2015模块:store.jsmiddleware-config.js和自动生成middleware-config-settings.js,包含一些逻辑和导入。

当应用程序以middleware-config-settings.js开头时,

webpack.config.js生成模块npm start

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检查项目时出现错误:

  

./中间件配置的设置。找不到所需的模块

首先,我尝试忽略该行的流量检查:

// @flow
...
// @FlowFixMe: ignore
import defaultSettings from './middleware-config-settings';
...

如果middleware-config-settings.js不存在,该apporach工作正常。否则我遇到了另一个问题:创建npm start middleware-config-settings.js文件并且下一个flow执行失败并出现另一个错误:

  

错误抑制评论。未使用的抑制

其次,我尝试将middleware-config.js添加到[ignore]的{​​{1}}部分。但后来我从.flowconfig收到了新的错误消息:

  

./中间件/中间件配置。找不到所需的模块

之后我将store.js添加到store.js部分,[ignore]执行得很好,但我认为这不是正确的方法。

第三种方法类似于第二种方法 - 我刚从flow删除// @flowmiddleware-config.js执行正常。而且这种方法也不太好(我的所有模块都应该flow)。

所以我有两个问题:

  1. 如何在不排除flow项检查中的任何文件的情况下执行无错flow执行?
  2. 当我将flow添加到store.js部分时,为什么我收到有关middleware-config.js的错误消息?如果我对documentation的理解是正确的,那么这是不正确的行为:
      

    .flowconfig文件中的[ignore]标题告诉flow在键入代码时忽略与指定正则表达式匹配的文件。

2 个答案:

答案 0 :(得分:1)

一些选择:

  • 避免自动生成文件(我假设您已经考虑过这个并决定反对)。
  • 创建包含原型配置的永久middleware-config-settings.js.flow,并将其签入版本控制。然后,Flow将查看该文件而不是查找.js文件,它将进行类型检查,但实际值将在每次运行时生成。这种方法的主要缺点是确保在进行更改时.js.flow文件的结构与生成的.js文件的结构相匹配。
  • 介绍生成所需文件的显式构建步骤,而不是在npm start脚本中隐式包含该步骤。然后,只需确保在使用Flow之前运行该构建步骤。

关于你的第二个问题,我相信如果你在[ignore]部分添加一些内容,Flow只会假装它根本不存在。因此,如果您从已检查的文件中导入一个被忽略的文件,Flow将给您一个错误。

答案 1 :(得分:0)

我通过将middleware-config-settings.js导入require并将模块的名称存储在变量中(以避免Required module not found错误)并添加{{1}来解决这个问题(避免@FlowFixMe错误):

The parameter passed to require() must be a literal string.