javascript - "Module not found"自动生成的文件的流程错误

标签 javascript ecmascript-6 flowtype es6-modules

我有三个 ES2015 模块:store.jsmiddleware-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.jsflow< 中删除了 //@flow/code> 执行得很好。而且这种方法也不太好(我的所有模块都应该是flowed)。

所以我有两个问题:

  1. 如何在不从 flow 检查中排除任何文件的情况下获得无错误的 flow 执行?
  2. 为什么当我将 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/

相关文章:

javascript - 在 TypeScript 文件中的光标下输入

reactjs - 绕过 Flow 中的几行

javascript - 随机生成的颜色并将它们保存在 CSS 中

reactjs - es6 React在子组件中获取 Prop

javascript - 在 Javascript 中有条件地初始化常量

javascript - 更新对象数组而不改变

javascript - 使用流类型限制向对象添加属性

javascript - yuicompressor-maven-plugin 似乎忽略了我的排除/包含选项

javascript - 长 JavaScript 函数末尾的 CSS 元素更新

javascript - 一秒钟后在焦点上隐藏输入字段占位符(文本框水印)