2017-01-11 3 views
0

У меня есть три модуля ES2015: store.js, middleware-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 я получил сообщение об ошибке:

./middleware-config-settings. Required module not found

Во-первых, я пытался игнорировать поток проверить на линии:

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

Это apporach работает нормально, если middleware-config-settings.js не существует. В противном случае у меня другая проблема: после того, как npm startmiddleware-config-settings.js созданный файл и следующий flow выполнение терпит неудачу с другой ошибкой:

Error suppressing comment. Unused suppression

Во-вторых, я попытался добавить middleware-config.js в [ignore] раздел в .flowconfig. Но потом я получил новое сообщение об ошибке с store.js:

./middleware/middleware-config. Required module not found

После этого я добавляю store.js в [ignore] секции тоже и flow выполняет хорошо, но я думаю, что это не правильно.

Третий подход похож на второй - я только что удалили // @flow из middleware-config.js и flow выполняет отлично. И этот подход тоже не слишком хорош (все мои модули должны быть flow ред).

Поэтому у меня есть два вопроса:

  1. Как я могу получить безошибочный flow исполнение без учета какой-либо из файлов, что из flow проверок?
  2. Почему у меня возникла ошибка в отношении store.js, когда я добавляю middleware-config.js в раздел [ignore]? Если мое понимание documentation правильно, так что это не правильное поведение:

    The [ignore] heading in a .flowconfig file tells flow to ignore files matching the specified regular expressions when type checking your code.

ответ

0

я решить эту проблему с некоторыми хак с импортом middleware-config-settings.js с require и хранения имя модуля в переменной (для избежания 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); 
1

Несколько вариантов:

  • Избегайте Автогенераторные файлов (я предполагаю, что вы уже рассмотрели это и решили против него).
  • Создайте постоянный middleware-config-settings.js.flow, который содержит прототипную конфигурацию и проверяет его на контроль версий. Затем Flow будет искать этот файл вместо поиска файла .js, и он будет проверяться typecheck, но фактические значения будут генерироваться при каждом прогоне. Основной недостаток этого подхода состоит в том, чтобы убедиться, что структура вашего файла .js.flow соответствует структуре сгенерированного файла .js при внесении изменений.
  • Представьте явный шаг сборки, который генерирует требуемые файлы, вместо того чтобы включать этот шаг неявно в ваш сценарий npm start. Затем просто убедитесь, что вы запустили этот шаг сборки перед использованием потока.

Что касается вашего второго вопроса, я считаю, что если вы добавите что-то в раздел [ignore], Flow просто притворится, что его вообще нет. Таким образом, если вы импортируете проигнорированный файл из проверенного файла, Flow выдаст вам сообщение об ошибке.

+0

Спасибо за ответ ! 1. Мне нужно сгенерировать этот файл. 2. Этот файл создан только в том случае, если он не существует, и каждый пользователь может редактировать его своими собственными значениями (и я не хочу создавать еще один поддельный файл). 3. Это немного сложнее, чем я хочу. Я решаю это с другим подходом. – feeeper

 Смежные вопросы

  • Нет связанных вопросов^_^